运行时加载Azure.Search.Common.5.0.2无法加载Microsoft.Rest.ClientRuntime

时间:2018-10-02 06:55:34

标签: c# dll .net-assembly azure-search assembly-loading

我正在尝试在运行时加载Microsoft.Azure.Search.Common.5.0.2的dll。根据我在nuget page上看到的内容以及安装时从nuget下载的内容,它取决于Microsoft.Rest.ClientRuntime.2.3.12。但是,当我直接尝试使用以下方法加载Azure.Search.Common dll时:-

Assembly.LoadFrom(dllPath).GetTypes().Select(t => t.Namespace).Distinct().ToList<string>();

我收到以下加载程序异常:-

  

{“无法加载文件或程序集'Microsoft.Rest.ClientRuntime,版本= 2.0.0.0,区域性=中性,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。系统找不到指定的文件。”:“ Microsoft .Rest.ClientRuntime,版本= 2.0.0.0,文化=中性,PublicKeyToken = 31bf3856ad364e35“}

从nuget安装后,我正在加载dll。具体来说,我正在加载以下dll:

  

Microsoft.Azure.Search.Common \ Microsoft.Azure.Search.Common.5.0.2 \ lib \ net452 \ Microsoft.Azure.Search.Common.dll

可以肯定的是,我也通过csproj和config文件检查了一些版本重定向,但这似乎并非如此。

上下文:我想知道一个项目可能正在使用的所有可能的名称空间,因此,我将下载并加载所有nuget软件包以获取其名称空间。

编辑:

我试图通过将dll加载到ILSpy中来进一步分析该dll。加载dll时,ILSpy还显示它引用了Microsoft.Rest.ClientRuntime的2.0.0.0版。它也无法加载引用并给出以下错误:-

  

// Microsoft.Rest.ClientRuntime,版本= 2.0.0.0,区域性=中性,PublicKeyToken = 31bf3856ad364e35       //程序集引用加载信息:       //程序集参考加载期间出现了一些问题,有关更多信息,请参见下文!       //错误:找不到参考:Microsoft.Rest.ClientRuntime,版本= 2.0.0.0,文化=中性,PublicKeyToken = 31bf3856ad364e35

     

// System.Net.Http,版本= 4.0.0.0,文化=中性,   PublicKeyToken = b03f5f7f11d50a3a(未解决)// Newtonsoft.Json,   版本= 6.0.0.0,文化=中性,PublicKeyToken = 30ad4fe6b2a6aeed   (未解决)// Microsoft.Rest.ClientRuntime.Azure,版本= 3.0.0.0,   Culture = neutral,PublicKeyToken = 31bf3856ad364e35 //组装   参考加载信息://期间存在一些问题   装配参考载荷,请参见下面的更多信息! //错误:   找不到参考:Microsoft.Rest.ClientRuntime.Azure,   版本= 3.0.0.0,文化=中性,PublicKeyToken = 31bf3856ad364e35

1 个答案:

答案 0 :(得分:1)

通过以下方式工作:

var ldAssmbly = Assembly.LoadFrom("Microsoft.Azure.Search.Common.dll");
var results = ldAssmbly.GetTypes().Select(t => t.Namespace).Distinct().ToList<string>();

enter image description here

技巧是将所有依赖项复制到输出文件夹(就像我所做的那样)。 Microsoft以一种很酷的方式构建了Assembly Loader,可以在其中扫描当前路径中的依赖项。利用这一点:)

它确实取决于v2.0.0.0-以下来自IL清单

enter image description here

您可以检查App.config-安装nuget软件包时是否添加了程序集重定向?这可能是当您反射加载装配时它不起作用的原因。

更新:- 是的-似乎很狡猾:-

在安装nuget之后-它确实说依赖关系是v2.3.12 但是,添加的dll在VisualStudio中显示v2.0.0。 enter image description here dll文件属性显示为v2.3.12(来自AssemblyInfo版本属性)

enter image description here

但是在进行IL检查时-它显然是v2.0.0(这是VisualStudio所显示的)

enter image description here