我目前正在开发一个由20个项目组成的.NET应用程序。其中一些项目是使用.NET 3.5编译的,其他一些仍然是.NET 2.0项目(到目前为止没有问题)。
问题是,如果我包含一个外部组件,我总是得到以下警告:
发现同一依赖程序集的不同版本之间存在冲突。
这个警告到底是什么意思,有没有可能排除这个警告(就像在源代码文件中使用#杂注停用)?
发布于 2010-01-26 13:54:29
此警告意味着两个项目引用了相同的程序集(例如System.Windows.Forms
),但这两个项目需要不同的版本。您有几个选项:
System.Windows.Forms
。你可以在Visual Studio中双击error来快速添加绑定重定向。CopyLocal=true
。我不确定这是否会抑制警告。与上面的选项2一样,这意味着所有项目都将使用System.Windows.Forms.的.Net 3.5版本
以下是识别违规引用的几种方法:
发布于 2008-08-20 12:08:05
基本上,当您引用的程序集的"Copy Local“设置为"True”时,就会发生这种情况,这意味着DLL的副本与您的exe一起放在bin文件夹中。
由于Visual Studio还将复制被引用程序集的所有依赖项,因此最终可能会引用同一程序集的两个不同版本。如果您的项目位于不同的解决方案中,则更有可能发生这种情况,因此可以单独编译。
我解决这个问题的方法是将程序集项目中的引用的Copy Local设置为False。只对可执行文件/web应用程序执行此操作,在这些应用程序中,您需要运行最终产品的程序集。
希望这是有意义的!
发布于 2015-11-10 23:18:51
我想发布他们在上面的评论中提供的pauloya的解决方案。我相信这是找到令人不快的引用的最佳解决方案。
要查找什么是“令人不快的引用”,最简单的方法是设置生成输出详细信息(工具、选项、项目和解决方案、生成和运行、MSBuild项目生成输出详细信息),并在生成之后,在输出窗口中搜索警告。查看其正上方的文本。
例如,当您在output面板中搜索"conflict“时,您可能会找到类似以下内容:
3> There was a conflict between "EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" and "EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".
3> "EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" was chosen because it was primary and "EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" was not.
如您所见,EF版本5和6之间存在冲突。
https://stackoverflow.com/questions/17806
复制相似问题