当我清理并构建具有多个项目的解决方案时,输出窗口将报告构建成功。然而,当我查看错误列表窗口时,它向我显示了这样的警告:

发现同一依赖程序集的不同版本之间存在无法解决的冲突。当日志详细信息设置为detailed时,这些引用冲突将在生成日志中列出。C:\Program Files (x86)\MSBuild\12.0\bin\ Microsoft.Common.CurrentVersion.targets

当我双击此消息时,它将打开C:\Program Files (x86)\MSBuild\12.0\bin\ Microsoft.Common.CurrentVersion。目标文件,但我不明白任何东西在它。

我正在使用Visual Studio Express 2013的Web。

我如何找出什么是错误的,与哪个DLL,然后我如何使警告消失?


当前回答

显然有很多不同的原因,因此有很多解决这个问题的方法。为了将我的程序集加入到混合中,我们将之前在我们的Web项目中直接引用的程序集(System.Net.Http)升级到由NuGet管理的版本。这删除了该项目中的直接引用,但是我们的测试项目仍然包含直接引用。升级两个项目以使用nuget管理的程序集解决了这个问题。

其他回答

我将MSBuild详细信息更改为诊断。但是找不到问题在哪里,所以根据上面的答案,我在app.config中有这样的代码:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="XbimXplorer.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>

所以我只是把第一个系统的版本从4.0.0.0改为12.0.0.0,我的项目工作了。

重申@elshev的评论 右键单击解决方案->管理解决方案->的NuGet包在巩固下,你可以看到是否有不同版本的相同的包被安装。在那里更新包。解决冲突错误。

您可以运行Dotnet CLI进行详细的诊断,以帮助查找问题。

Dotnet运行——verbose diagnostic >> full_build.log

构建完成后,您可以通过日志文件(full_build.log)搜索错误。例如,搜索“一个冲突”,应该会把你直接带到问题所在。

eta: SO自己的@Nick Craver写了一篇关于这方面的杀手级文章,你应该读一下


虽然其他的回答是这样说的,但他们并没有明确表示,所以我将....

在VS2013.2上,要真正触发引用信息的发射,您不需要阅读消息,它说:

C:\Program Files (x86)\MSBuild\12.0\bin\ Microsoft.Common.CurrentVersion.targets(1697,5):警告MSB3277:发现同一依赖程序集的不同版本之间存在无法解决的冲突。当日志详细信息设置为detailed时,这些引用冲突将在生成日志中列出。

这是不正确的(或者至少在某些版本的Visual Studio中是这样的——在VS2015更新3或更高的版本中似乎是可以的)。相反,将其转到诊断(从工具->选项->项目和解决方案->构建和运行,设置MSBuild项目构建输出verbose),这时你会看到如下消息:

“牛顿软”和“牛顿软”之间存在冲突。Json,版本=6.0.0.0,文化=中性,PublicKeyToken=30ad4fe6b2a6aeed"和"牛顿软。Json,版本=6.0.5.17707,文化=中性,PublicKeyToken=30ad4fe6b2a6aeed"。 “Newtonsoft。Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”被选中是因为它是primary和“Newtonsoft. Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”。Json,版本=6.0.5.17707,文化=中性,PublicKeyToken=30ad4fe6b2a6aeed"不是。

Then

按Ctrl-Alt-O进入构建输出窗口 搜索“was chosen”可以找到下钻。

...是的,对于那些看[诊断]信息细节的人来说,这对这个无知的人来说是新闻,在城里有一个公约,所有6。x版本在内部是Assembly Version 6.0.0.0,即只有SemVer Major组件进入Assembly Version:)

如果您对包做了任何更改,请重新打开sln。这对我很管用!