[.net] 警告:发现相同相关程序集的不同版本之间存在冲突


Answers

基本上这是在您引用的程序集将“Copy Local”设置为“True”时发生的,这意味着将DLL的副本与您的exe文件一起放入bin文件夹中。

由于Visual Studio也会复制引用程序集的所有依赖关系,因此可能最终引用两个不同的相同程序集构建。 如果您的项目采用不同的解决方案,则这种情况更可能发生,因此可以单独编译。

我已经掌握了它的方法是将复制本地设置为False以便在装配项目中引用。 只适用于需要运行成品的组件的可执行文件/ Web应用程序。

希望是有道理的!

Question

我目前正在开发一个由20个项目组成的.NET应用程序。 其中一些项目是使用.NET 3.5编译的,其他一些项目仍然是.NET 2.0项目(目前为止没有问题)。

问题是,如果我包含一个外部组件,我总是会收到以下警告:

"Found conflicts between different versions of the same dependent assembly".

这个警告究竟意味着什么,有可能排除此警告(如在源代码文件中使用#pragma disable)?




我与我的一个项目有同样的问题,但是,以上都没有帮助解决警告。 我检查了详细的构建日志文件,我使用AsmSpy来验证我在受影响的解决方案中为每个项目使用了正确的版本,我仔细检查了每个项目文件中的实际条目 - 没有任何帮助。

最终发现问题是我在一个项目中引用的其中一个引用的嵌套依赖。 这个参考文献(A)又需要一个不同版本的(B),它直接从我的解决方案中的所有其他项目中引用。 更新引用项目中的引用解决了它。

Solution A
+--Project A
   +--Reference A (version 1.1.0.0)
   +--Reference B
+--Project B
   +--Reference A (version 1.1.0.0)
   +--Reference B
   +--Reference C
+--Project C
   +--Reference X (this indirectly references Reference A, but with e.g. version 1.1.1.0)

Solution B
+--Project A
   +--Reference A (version 1.1.1.0)

我希望上面的内容能够说明我的意思,花了我几个小时找出答案,希望其他人也能受益。




在Visual Studio上,如果右键单击解决方案并且管理nuget包则会出现一个“合并”选项卡,将所有软件包设置为相同的版本。




这也发生在我身上。 一个dll被引用两次:直接引用(在引用中)和间接引用(由另一个引用的项目引用)。 我删除了直接参考,清理和重建解决方案。 问题已修复。




=>检查是否会部分安装应用程序的某个实例。

=>首先从卸载应用程序中卸载该实例。

=>然后清理,重建,然后尝试部署。

这解决了我的问题。它也可以帮助你。 最好的祝福。




另一件需要考虑和检查的事情是,确保你没有任何运行的服务在使用该bin文件夹。 如果他们停止服务并重建解决方案




这实际上取决于你的外部组件。 当您在.NET应用程序中引用外部组件时,它会生成GUID以识别该组件。 当您的某个项目引用的外部组件与另一个组件中的另一个此类组件具有相同的名称但版本不同时,会发生此错误。

当您使用“浏览”查找引用并添加错误版本的程序集,或者您的代码库中的组件版本与您在本地计算机上安装的版本不同时,有时会发生这种情况。

试着找出哪些项目有这些冲突,从参考列表中删除组件,然后再次添加它们,确保您指向同一个文件。