Wat*_* v2 349 .net msbuild visual-studio-express visual-studio
当我清理并构建包含多个项目的解决方案时,输出窗口会报告构建成功.但是,当我查看错误列表窗口时,它会显示此警告:
发现无法解析的同一依赖程序集的不同版本之间的冲突.当日志详细程度设置为详细时,这些引用冲突将在构建日志中列出.C:\ Program Files(x86)\ MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets
当我双击此消息时,它会打开C:\ Program Files(x86)\ MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets文件,但我不明白其中的任何内容.
我正在使用Visual Studio Express 2013进行Web.
如何找出错误以及哪个DLL以及如何使警告消失?
Rub*_*ink 482
虽然其他回答说这个,但他们没有说明,所以我会......
在VS2013.2上,要实际触发引用信息的发送,您需要不读取消息,其中说:
C:\ Program Files(x86)\ MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1697,5):警告MSB3277:发现无法解析的同一依赖程序集的不同版本之间发生冲突.当日志详细程度设置为详细时,这些引用冲突将在构建日志中列出.
这是不正确的(或者至少是某些版本的Visual Studio - 在最新的VS2015 Update 3或更高版本中似乎没问题).而是将其转换为诊断(从工具 - >选项 - >项目和解决方案 - >构建和运行,设置MSBuild项目构建输出详细程度),然后您将看到如下消息:
"Newtonsoft.Json,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed"和"Newtonsoft.Json,Version = 6.0.5.17707,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed"之间存在冲突.
- 选择"Newtonsoft.Json,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed",因为它是主要的并且"Newtonsoft.Json,Version = 6.0.5.17707,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed"不是.
然后
Ctrl-Alt-O 转到构建输出窗口......是的,对于那些正在查看[诊断]消息细节的人来说,这个无知的消息是,城里有一个公约,所有6.x版本都是内部汇编版本6.0.0.0,即只有SemVer Major组件进入大会版本 :)
Ily*_*kov 71
运行msbuild Foo.sln /t:Rebuild /v:diag(从C:\Program Files (x86)\MSBuild\12.0\bin)以从命令行构建解决方案并获取更多详细信息,然后找到.csproj.记录警告的内容并检查其引用和使用版本不同的相同公共程序集的其他项目的引用.
编辑:您还可以直接在VS2013中设置构建详细程度.转到Tools> Options菜单,然后转到Projects and Solutions并设置MSBuild详细程度Diagnostic.
编辑:很少说明,因为我自己只有一个.在我的情况下,警告是由于我使用Resharper提示添加了一个引用而不是Add Reference对话框,即使v4和v12都可供选择,它仍然没有版本.
<Reference Include="Microsoft.Build, Version=12.0.0.0, ..." />
<Reference Include="Microsoft.Build.Framework" />
Run Code Online (Sandbox Code Playgroud)
VS
<Reference Include="Microsoft.Build, Version=12.0.0.0, ..." />
<Reference Include="Microsoft.Build.Framework, Version=12.0.0.0, ..." />
Run Code Online (Sandbox Code Playgroud)
在具有/v:diag详细程度的MSBuild日志中,它看起来如下所示.提供两个引用冲突的细节: -
There was a conflict between
"Microsoft.Build.Framework, Version=4.0.0.0, ..." and
"Microsoft.Build.Framework, Version=12.0.0.0, ...". (TaskId:16)
"Microsoft.Build.Framework, Version=4.0.0.0, ..." was chosen because it was primary and
"Microsoft.Build.Framework, Version=12.0.0.0, ..." was not. (TaskId:16)
References which depend on "Microsoft.Build.Framework, Version=4.0.0.0, ..."
[C:\...\v4.5.1\Microsoft.Build.Framework.dll]. (TaskId:16)
C:\...\v4.5.1\Microsoft.Build.Framework.dll (TaskId:16)
Project file item includes which caused reference "C:\...\v4.5.1\Microsoft.Build.Framework.dll". (TaskId:16)
Microsoft.Build.Framework (TaskId:16)
References which depend on "Microsoft.Build.Framework, Version=12.0.0.0, ..."
[C:\...\v12.0\Microsoft.Build.Framework.dll]. (TaskId:16)
C:\...\v12.0\Microsoft.Build.dll (TaskId:16)
Project file item includes which caused reference "C:\...\v12.0\Microsoft.Build.dll". (TaskId:16)
Microsoft.Build, Version=12.0.0.0, ... (TaskId:16)
C:\...\v12.0\Microsoft.Build.Engine.dll (TaskId:16)
Project file item includes which caused reference "C:\...\v12.0\Microsoft.Build.Engine.dll". (TaskId:16)
Microsoft.Build, Version=12.0.0.0, ... (TaskId:16)
C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1697,5): warning MSB3277:
Found conflicts between different versions of the same dependent assembly that could not be resolved.
These reference conflicts are listed in the build log when log verbosity is set to detailed.
[C:\Users\Ilya.Kozhevnikov\Dropbox\BuildTree\BuildTree\BuildTree.csproj]
Run Code Online (Sandbox Code Playgroud)
Ale*_*tov 36
我只能通过比较显示的两条消息来支持Ruben的回答:

和消息:
C:\ Program Files(x86)\ MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1697,5):警告MSB3277:发现无法解析的同一依赖程序集的不同版本之间发生冲突.当日志详细程度设置为详细时,这些引用冲突将在构建日志中列出.
所以,鲁本是对的 - 这不是真的.没有任何冲突,只是缺少装配.当项目是ASP.NET应用程序时,这尤其无聊,因为视图是按需编译的,即在第一次显示之前.这是必须使组件可用的时候.(可以选择将视图与其余代码一起预编译,但这是另一个故事.)另一方面,如果将详细程度设置为Diagnostic,则会得到以下输出:
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".检查以确保磁盘上存在程序集.如果您的代码需要此引用,则可能会出现编译错误.
因此,您需要做的就是:
更多关于NuGet画廊的信息.有关在此处预编译ASP.NET视图的更多信息.
sre*_*ree 20
改变visual studio中的构建详细程度将有助于指出正确的方向.按照以下步骤更改VS中的详细程度
Quiet,Minimal,Normal,Detailed和Diagnostic检查VS中的输出窗口(Ctrl+ Alt+ O)以查看构建日志中的更改.
Sha*_*gta 16
重申@elshev的评论之一右键单击解决方案 - >管理NuGet软件包以获得解决方案 - >在Consolidate下,您可以查看是否安装了相同软件包的不同版本.在那里更新包.冲突错误已解决.
我正在使用Visual Studio 2017并在更新一些Nuget包时遇到了这个问题.对我有用的是打开我的web.config文件并找到<runtime><assemblyBinding>节点并将其删除.保存web.config并重建项目.
看看Error List窗口.你会看到关于绑定冲突的长期警告.双击它,它将自动重新创建<runtime><assemblyBinding>具有正确映射的块.