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

发现同一依赖程序集的不同版本之间存在无法解决的冲突。当日志详细信息设置为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,然后我如何使警告消失?


当前回答

我已经安装了Newtonsoft。Json v10.0.0.3和Newtonsoft。Json v11.X.X。X在不同的项目从nuget.org从管理NuGet Packagaes和再次重新安装它(相同的版本)。重新安装时解决了所有与剃刀版本相关的冲突。为我工作吧!

其他回答

I found that, sometimes, nuget packages will install (what I'm guessing are) .NET Core required components or other items that conflict with the already-installed framework. My solution there was to open the project (.csproj) file and remove those references. For example, System.IO, System.Threading and such, tend to be added when Microsoft.Bcl is included via some recently installed NuGet package. There's no reason for specific versions of those in my projects, so I remove the references and the project builds. Hope that helps.

您可以在项目文件中搜索“参考”并删除冲突。如果它们包含在系统中,那么去掉它们,构建应该可以工作。这可能不能回答这个问题的所有情况-我确保你知道什么对我有用:)

我注释掉的例子:

< !<参考Include=“系统。”Runtime,版本=2.6.9.0,Culture=neutral, PublicKeyToken= b03f5f7f3a, processorArchitecture=MSIL"> -> < !- <HintPath>$(解决方案)packages\Microsoft.Bcl.1.1.9\lib\net40\系统. runtpath > < !<Private>True</Private> -> < !</参考> ->

在visual studio中改变构建的冗长将有助于指向正确的方向。按照以下步骤更改VS中的详细信息

进入工具->选项菜单在VS 开放项目和解决方案->构建和运行 更改MSBuild项目构建输出详细信息的值。选择 分别是安静、最小、正常、详细和诊断

检查VS中的输出窗口(Ctrl+Alt+O),查看构建日志中的更改。

我只能通过对比所显示的两条消息来进一步支持Ruben的回答:

信息是:

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

So, Ruben's right—this is just not true. There are no conflicts whatsoever, just a missing assembly. This is especially boring when the project is an ASP.NET application, since the views are compiled on demand, that is, just before displayed for the first time. This is when it becomes necessary to have the assembly available. (There's an option to pre-compile the views together with the rest of the code, but this is another story.) On the other hand, if you set the verbosity to Diagnostic you get the following output:

C:\Program Files (x86)\MSBuild\12.0\bin\ Microsoft.Common.CurrentVersion.targets(1697,5):警告MSB3245:无法解析此引用。无法定位程序集“System.Web”。Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"。检查以确保程序集存在于磁盘上。如果您的代码需要此引用,则可能会出现编译错误。

因此,你所需要做的就是:

手动向程序集添加引用(可能将其定位到磁盘上) GAC,并将其添加为“直接”参考),或 使用NuGet包(如果在图库中发布)下载它并引用其中包含的程序集。

更多关于NuGet画廊在这里。 更多关于预编译ASP。NET视图。

我遵循了这里的几个回复的建议来找出问题所在,但似乎没有一个答案能解释如何修复它。我的问题是,一个参考文献需要另一个参考文献的不同版本。因此,Newtonsoft的版本是6,但其他一些DLL想要4.5。然后我按照其他答案的建议升级了Newtonsoft,这让事情变得更糟。

所以我实际上降低了我的Newtonsoft安装,警告消失了(VS 2017):

右键单击解决方案资源管理器中的引用,并选择管理NuGet包… 在“Installed”选项卡下,找到Newtonsoft(或任何你的冲突) 在右侧,“版本”旁边会出现一个下拉框,您可以将其更改为旧版本。对我来说,这个下拉菜单可以用来降级并不明显。

根据其他答案,将输出日志记录级别设置为detailed并在那里搜索冲突,这将告诉您下一步要查看的位置。

在我的例子中,它让我在几个方向上寻找引用的源,但最后发现问题出在我的一个可移植类库项目上,它瞄准了错误的版本,并引入了自己的引用版本,因此产生了冲突。一个快速的重新定位,问题就解决了。