0

我正在尝试在运行时加载 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, Version=2.0.0.0, Culture=neutral, 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 和配置文件,以检查某些版本重定向,但情况似乎并非如此。

上下文:我想知道项目可能使用的所有可能的命名空间,因此我正在下载并加载所有 nuget 包以获取它们的命名空间等。

编辑:

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

// Microsoft.Rest.ClientRuntime, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 // 程序集引用加载信息: // 程序集引用加载过程中出现了一些问题,更多信息见下文!// 错误:找不到参考:Microsoft.Rest.ClientRuntime,Version=2.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35

// System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a (unresolved) // Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed (unresolved) // Microsoft. Rest.ClientRuntime.Azure, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 // 程序集引用加载信息: // 程序集引用加载过程中出现了一些问题,详情见下文!// 错误:找不到参考:Microsoft.Rest.ClientRuntime.Azure, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

4

1 回答 1

2

顺便说一句,以下工作:

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

在此处输入图像描述

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

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

在此处输入图像描述

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

更新:- 是的-看起来很狡猾:-

在 nuget install 之后 - 它确实说依赖项是 v2.3.12 但是,添加的 dll 在 VisualStudio 中显示 v2.0.0。 在此处输入图像描述 dll 文件属性表示 v2.3.12(来自 AssemblyInfo 版本属性)

在此处输入图像描述

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

在此处输入图像描述

于 2018-10-02T07:14:30.867 回答