无法执行引用Microsoft.Rest.ClientRuntime的U-SQL作业,陷入死锁困境
解决U-SQL中引用
Microsoft.Rest.ClientRuntime DLL的死锁问题 我之前也踩过U-SQL程序集引用的类似坑,给你几个可行的方向来突破这个僵局:
1. 先尝试用完整强名称引用系统程序集
别先认定它不属于系统程序集范畴,U-SQL的系统程序集列表可能比你预期的更全。试试在脚本开头用完整强名称引用:
REFERENCE SYSTEM ASSEMBLY [Microsoft.Rest.ClientRuntime, Version=2.3.20.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35];
如果执行不报错,说明只是之前用短名称导致识别失败,直接用这个方式就能解决。要是报错提示找不到系统程序集,再走下一步。
2. 作为自定义程序集上传引用
既然没法注册成系统程序集,那就把它当自定义程序集处理:
- 第一步:把
Microsoft.Rest.ClientRuntime.dll以及它的依赖DLL(比如匹配版本的Newtonsoft.Json.dll)上传到你的Azure Data Lake Storage(ADLS)或Azure Blob Storage的U-SQL工作区关联存储中。 - 第二步:在U-SQL脚本里用
REFERENCE ASSEMBLY引用,路径用存储的相对或绝对路径:REFERENCE ASSEMBLY @"/Assemblies/Microsoft.Rest.ClientRuntime.dll"; REFERENCE ASSEMBLY @"/Assemblies/Newtonsoft.Json.dll"; -- 若有依赖需同时引用 - 第三步:如果是代码后置(Code-Behind)的C#类,确保项目中已添加这些DLL的引用,并且设置
复制到输出目录为始终复制,这样部署脚本时会自动同步到存储。
3. 检查版本兼容性
有时候问题出在DLL版本和U-SQL运行时不匹配,建议下载与U-SQL运行时(比如Azure Data Lake Analytics的运行时版本)兼容的Microsoft.Rest.ClientRuntime版本,优先选择.NET Framework 4.6.1兼容的版本——因为U-SQL是基于.NET Framework运行的。
4. 验证代码后置的引用配置
如果是代码后置类出现问题,要确认:
- 没有在
using语句里引用不存在的命名空间; - 脚本中已正确关联代码后置编译生成的程序集:
REFERENCE ASSEMBLY @"/Assemblies/MyCodeBehindAssembly.dll";
内容的提问来源于stack exchange,提问作者Jorge Ribeiro
相关产品推荐
相关产品推荐

