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

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

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

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


当前回答

此警告意味着两个项目引用相同的程序集(例如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项目构建输出详细,详细)之后 构建时,在输出窗口中搜索警告,并查看 文字就在上面。(向保罗亚致敬,她在 对这个答案的评论)。

其他回答

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

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

我解决这个问题的方法是在组装项目中将Copy Local设置为False。只针对可执行文件/web应用程序,在这些应用程序中,您需要运行成品的程序集。

希望这有意义!

我也有同样的问题,我通过在web.config中更改以下内容来解决。

这发生在我身上,因为我正在使用Newtonsoft运行应用程序。Json 4.0

来自:

<dependentAssembly>
  <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>

To:

<dependentAssembly>
  <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>

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

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

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

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

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

容易peasy

打开“解决方案资源管理器”。 点击“显示所有文件” 扩大“引用” 您将看到一个(或多个)引用与其他引用的图标略有不同。通常情况下,它会有一个黄色的方框,建议你记下它。把它拿掉。 重新添加引用并编译代码。 这是所有。

在我的例子中,MySQL引用有一个问题。不管怎样,我可以在所有可用的引用列表下列出它的三个版本;适用于。net 2.0、。net 4.0和。net 4.5。我遵循了上面的方法1到6,它对我很有效。