C# 运行时加载Azure.Search.Common.5.0.2无法加载Microsoft.Rest.ClientRuntime
我正在尝试在运行时加载Microsoft.Azure.Search.Common.5.0.2的dll。从我在上看到的以及nuget在安装时下载的内容来看,它取决于Microsoft.Rest.ClientRuntime.2.3.12。但是,当我直接尝试使用以下命令加载Azure.Search.Common dll时:-C# 运行时加载Azure.Search.Common.5.0.2无法加载Microsoft.Rest.ClientRuntime,c#,dll,.net-assembly,azure-cognitive-search,assembly-loading,C#,Dll,.net Assembly,Azure Cognitive Search,Assembly Loading,我正在尝试在运行时加载Microsoft.Azure.Search.Common.5.0.2的dll。从我在上看到的以及nuget在安装时下载的内容来看,它取决于Microsoft.Rest.ClientRuntime.2.3.12。但是,当我直接尝试使用以下命令加载Azure.Search.Common dll时:- Assembly.LoadFrom(dllPath).GetTypes().Select(t => t.Namespace).Distinct().ToList<st
Assembly.LoadFrom(dllPath).GetTypes().Select(t => t.Namespace).Distinct().ToList<string>();
Assembly.LoadFrom(dllPath).GetTypes().Select(t=>t.Namespace).Distinct().ToList();
我得到以下加载程序异常:-
{“无法加载文件或程序集'Microsoft.Rest.ClientRuntime,版本=2.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时,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=30AD4FE6B2A6EED
(未解析)//Microsoft.Rest.ClientRuntime.Azure,版本=3.0.0.0,
区域性=中性,PublicKeyToken=31bf3856ad364e35//程序集
参考加载信息://在加载过程中出现了一些问题
程序集参考加载,请参见下文以了解更多信息!//错误:
找不到引用:Microsoft.Rest.ClientRuntime.Azure,
版本=3.0.0.0,区域性=中性,PublicKeyToken=31bf3856ad364e35
顺便说一句,以下方法奏效了:
var ldAssmbly = Assembly.LoadFrom("Microsoft.Azure.Search.Common.dll");
var results = ldAssmbly.GetTypes().Select(t => t.Namespace).Distinct().ToList<string>();
var ldAssmbly=Assembly.LoadFrom(“Microsoft.Azure.Search.Common.dll”);
var results=ldAssmbly.GetTypes().Select(t=>t.Namespace.Distinct().ToList();
诀窍是将所有依赖项复制到输出文件夹(就像我做的那样)。Microsoft以一种很酷的方式构建了程序集加载器,它可以扫描当前路径中的依赖项。利用这一点:)
它确实依赖于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所显示的)
通过以下工作方式:
var ldAssmbly = Assembly.LoadFrom("Microsoft.Azure.Search.Common.dll");
var results = ldAssmbly.GetTypes().Select(t => t.Namespace).Distinct().ToList<string>();
var ldAssmbly=Assembly.LoadFrom(“Microsoft.Azure.Search.Common.dll”);
var results=ldAssmbly.GetTypes().Select(t=>t.Namespace.Distinct().ToList();
诀窍是将所有依赖项复制到输出文件夹(就像我做的那样)。Microsoft以一种很酷的方式构建了程序集加载器,它可以扫描当前路径中的依赖项。利用这一点:)
它确实依赖于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所显示的)
在我看来,
Microsoft.Azure.Search.Common.dll
正在尝试加载Microsoft.Rest.ClientRuntime
的2.0版,该版本在输出目录中丢失,看起来像是一个bug。ILSpy给出了一个类似的错误。在我看来,Microsoft.Azure.Search.Common.dll
似乎在尝试加载Microsoft.Rest.ClientRuntime的2.0版
,但输出目录中缺少该版本,这似乎是一个bug。ILSpy给出了一个类似的错误。它依赖于v2.0.0.0,但安装nuget会安装v2.3.12,这就是为什么它无法找到引用的版本并引发异常?标准做法是只在AssemblyVersion中设置主版本号,而在AssemblyFileVersion中设置次版本号和内部版本/修补程序号。这允许使用兼容但不完全相同的程序集版本。例如,您可以将Microsoft.Rest.ClientRuntime升级到2.3.14,而无需同时升级Microsoft.Azure.Search。这取决于v2.0.0.0,但安装nuget会安装v2.3.12,这就是为什么它找不到引用的版本并引发异常的原因?标准做法是只在