我正在尝试在运行时加载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
答案 0 :(得分:1)
通过以下方式工作:
var ldAssmbly = Assembly.LoadFrom("Microsoft.Azure.Search.Common.dll");
var results = ldAssmbly.GetTypes().Select(t => t.Namespace).Distinct().ToList<string>();
它确实取决于v2.0.0.0-以下来自IL清单
您可以检查App.config-安装nuget软件包时是否添加了程序集重定向?这可能是当您反射加载装配时它不起作用的原因。
更新:- 是的-似乎很狡猾:-
在安装nuget之后-它确实说依赖关系是v2.3.12 但是,添加的dll在VisualStudio中显示v2.0.0。 dll文件属性显示为v2.3.12(来自AssemblyInfo版本属性)
但是在进行IL检查时-它显然是v2.0.0(这是VisualStudio所显示的)