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

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

发现同一依赖程序集的不同版本之间存在冲突。

这个警告到底是什么意思,有没有可能排除这个警告(比如在源代码文件中使用#pragma disable)?


当前回答

如果使用NuGet,我所要做的是:

右键单击项目,单击管理NuGet包.. 点击右上角的齿轮 在包源上方的NuGet包管理器中单击“常规”选项卡 检查“跳过应用绑定重定向”在绑定重定向 清理重建,警告就没了

容易peasy

其他回答

我想在上面的评论中发布pauloya提供的解决方案。我相信这是找到冒犯性引用的最佳解决方案。

最简单的方法找到什么是“冒犯的引用”是 设置生成输出的详细信息(工具,选项,项目和解决方案, 构建和运行,MSBuild项目构建输出详细信息)和 构建之后,在输出窗口中搜索警告。查看原文 就在它上面。

例如,当你在输出面板中搜索“冲突”时,你可能会发现这样的东西:

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之间存在冲突。

此警告意味着两个项目引用相同的程序集(例如System.Windows.Forms),但这两个项目需要不同的版本。你有几个选择:

Recompile all projects to use the same versions (e.g. move all to .Net 3.5). This is the preferred option because all code is running with the versions of dependencies they were compiled with. Add a binding redirect. This will suppress the warning. However, your .Net 2.0 projects will (at runtime) be bound to the .Net 3.5 versions of dependent assemblies such as System.Windows.Forms. You can quickly add a binding redirect by double-clicking on error in Visual Studio. Use CopyLocal=true. I'm not sure if this will suppress the warning. It will, like option 2 above, mean that all projects will use the .Net 3.5 version of System.Windows.Forms.

这里有几个方法来识别不合适的推荐人:

您可以使用一个实用程序,例如在 https://gist.github.com/1553265 另一个简单的方法是设置Build 输出冗长(工具,选项,项目和解决方案,构建和 运行,MSBuild项目构建输出详细,详细)之后 构建时,在输出窗口中搜索警告,并查看 文字就在上面。(向保罗亚致敬,她在 对这个答案的评论)。

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

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

尝试找出哪些项目有这些冲突,从引用列表中删除组件,然后再次添加它们,确保指向相同的文件。

也有这个问题-在我的情况下,这是由于有“特定版本”属性上的许多引用设置为真。在这些引用上将其更改为false就解决了这个问题。

在花了几个小时分析详细的构建日志之后,我发现我的解决方案中的几个项目针对的是不同的. net版本。我将它们全部更改为. net 4.7.2并重新构建解决方案,错误得到解决。