Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 运行时加载Azure.Search.Common.5.0.2无法加载Microsoft.Rest.ClientRuntime_C#_Dll_.net Assembly_Azure Cognitive Search_Assembly Loading - Fatal编程技术网

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

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

我正在尝试在运行时加载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<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,这就是为什么它找不到引用的版本并引发异常的原因?标准做法是只在