DLL版本不匹配问题

you*_*yed 2 c# dll

* 问题简介

我正在使用一个使用 .Net 框架的软件来执行一些任务。

我们正在尝试使用 Mailkit.dll 文件,但在使用它时我们遇到以下消息:

内部:无法执行代码阶段,因为代码阶段引发异常:无法加载文件或程序集“System.Memory,Version=4.0.1.2,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT 异常:0x80131040)

从我到目前为止得出的结论来看,Mailkit.dll 依赖于 Mimekit.dll,而 Mimekit.dll 又依赖于 System.memory.dll,类似的东西。

Mailkit.dll > Mimekit.dll > System.Memory.dll

版本详情:

  • 机器上安装的.Net框架:4.7.3190
  • 应用程序使用的.Net框架:4.7
  • Mailkit.dll版本:3.4.1
  • Mimekit.dll 版本:3.4.1
  • 应用程序文件夹中的System.Memory.dll版本:4.6.28619.01

我不知道问题是什么或为什么会发生这种情况,但我很确定这与版本问题有关,因此欢迎任何帮助。

Han*_*ank 5

您提供的版本号是一个很好的起点。

对于 .NETFramework 4.7,MailKit v3.4.1 依赖于 MimeKit v3.4.1,后者又依赖于 System.Memory >= v4.5.5。

NuGet 版本 v4.5.5 的 System.Memory 具有 of AssemblyFileVersion4.6.31308.01Windows 资源管理器中显示的数字),但具有AssemblyVersionof 4.0.1.2。当 CLR 查找程序集时,程序集编号才是真正重要的。CLR 在加载 MimeKit 时查找,v4.0.1.2但只能找到v4.0.1.1.

最终输出中的版本比所需的版本旧。我发现您输出中实际的版本来自 System.Memory v4.5.4。: AssemblyFileVersion。: 。4.6.28619.01AssemblyVersion4.0.1.1

如果您直接引用 System.Memory nuget 包,则可能会发生这种情况。如果您确实有对 System.Memory 的直接包引用,那么您需要升级它。

如果您使用的是 SDK 样式的项目,则会收到错误消息,从而阻止这种情况发生。但您仍然应该收到有关检测到的版本冲突的构建警告。 在此输入图像描述