当使用msbuild编译一个.NET 3.5解决方案时,会出现此警告。
有时候可以使用NDepend来帮助解决问题,但在这种情况下它没有提供更多的细节。就像Bob一样, 我最终不得不打开ILDASM中的每个程序集,直到找到引用旧版本相关程序集的那个程序集。
我尝试使用VS 2010 Beta 2中的MSBUILD(因为Connect文章指出这个问题已经在CLR的下一个版本中修复了),但也没有提供更多的细节(也许是Beta 2之后修复的)。
是否有更好(更自动化)的方法?
当使用msbuild编译一个.NET 3.5解决方案时,会出现此警告。
有时候可以使用NDepend来帮助解决问题,但在这种情况下它没有提供更多的细节。就像Bob一样, 我最终不得不打开ILDASM中的每个程序集,直到找到引用旧版本相关程序集的那个程序集。
我尝试使用VS 2010 Beta 2中的MSBUILD(因为Connect文章指出这个问题已经在CLR的下一个版本中修复了),但也没有提供更多的细节(也许是Beta 2之后修复的)。
是否有更好(更自动化)的方法?
将“MSBuild项目构建输出详细程度”更改为“详细”或更高。要执行此操作,请按照以下步骤进行:
在出现的工具/选项页面上,根据您的版本将MSBuild项目构建输出详细程度级别设置为适当的设置:
查看MSBuild消息。 从中产生MSB3247的任务ResolveAssemblyReferences
应该可以帮助您调试此特定问题。
我的具体情况是对SqlServerCe的引用不正确。请参见以下内容。 我有两个引用了两个不同版本SqlServerCe的项目。我转到旧版本的项目,删除了引用,然后添加了正确的引用。
Target ResolveAssemblyReferences:
Consider app.config remapping of assembly "System.Data.SqlServerCe, ..."
from Version "3.5.1.0" [H:\...\Debug\System.Data.SqlServerCe.dll]
to Version "9.0.242.0" [C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PublicAssemblies\System.Data.SqlServerCe.dll]
to solve conflict and get rid of warning.
C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets :
warning MSB3247: Found conflicts between different versions of the same dependent assembly.
你不需要打开每个程序集来确定引用程序集的版本。
Mike Hadlow发布了一个小控制台应用程序,名为AsmSpy,它很好地列出了每个程序集的引用:
Reference: System.Net.Http.Formatting
4.0.0.0 by Shared.MessageStack
4.0.0.0 by System.Web.Http
Reference: System.Net.Http
2.0.0.0 by Shared.MessageStack
2.0.0.0 by System.Net.Http.Formatting
4.0.0.0 by System.Net.Http.WebRequest
2.0.0.0 by System.Web.Http.Common
2.0.0.0 by System.Web.Http
2.0.0.0 by System.Web.Http.WebHost
这是一个比依赖于MSBuild输出更快找到警告MSB3247底部的方式。
有时候 @AMissico 的回答不够详细。在我的情况下,我找不到“输出”窗口中的错误,所以我决定创建一个日志文件并分析它,具体步骤如下:
将生成日志保存至文件... https://msdn.microsoft.com/zh-cn/library/ms171470.aspx
msbuild MyProject.proj /fl /flp:logfile=MyProjectOutput.log;verbosity=detailed
查找文本:warning MS...
或指定的警告信息:(例如第9293行)Found conflicts between different versions...
,而冲突错误的完整细节将出现在此消息之上(例如第9277行)There was a conflicts between...
Visual Studio 2013
我发现(至少在Visual Studio 2010中)您需要将输出详细程度设置为“详细”才能找到问题。
可能是因为我的问题是一个之前是GAC引用的引用,在重新安装我的机器后不再是这种情况了。
我遇到了同样的错误,而其他答案也无法解决。我发现我们可以使用“Consolidate”NuGet包。
$ dep | awk '{ print $1 " " $2; print $4 " " $5 }' | awk '{ if (length(versions[$1]) == 0) versions[$1] = $2; if (versions[$1] != $2) errors[$1] = $1; } END{ for(e in errors) print e } '
System.Web.Http
$ dep myproject/bin | grep -i System\.Web\.Http
MyProject-1.0.0.0 >> System.Web.Http.Web-5.2.3.0 2 ( FooLib-1.0.0.0 )
MyProject-1.0.0.0 >> System.Web.Http.Web-4.0.0.0 2 ( BarLib-1.0.0.0 )
FooLib-1.0.0.0 > System.Web.Http.Web-5.2.3.0 1
BarLib-1.0.0.0 > System.Web.Http.Web-4.0.0.0 1
快速解决:
右键点击解决方案 -> 管理解决方案的 NuGet 包 -> 在合并下,您可以看到是否安装了不同版本的相同包。卸载不同的版本并安装最新版本。