msbuild - Resolving MSB3247 - 找到依赖程序集的不同版本之间的冲突

  显示原文与译文双语对照的内容

使用msbuild编译时,.NET 3.5解决方案得到了这里警告。

有时候NDepend可能会有所帮助,但在这种情况下它并没有给出更多细节。 就像 Bob 我最终不得不在ILDASM中打开每个程序集,直到找到一个引用了依赖程序集的旧版本的程序集。

我也尝试使用MSBUILD从 vs 2010测试版 2 ( 就像连接文章所指出的,这是在下一个版本的CLR中修复的) 但这既没有提供任何更多细节( 也许贝塔 2旁定点)

是否有更好的( 更自动化) 方法?

时间:

将"msbuild项目生成输出详细信息"更改为"详细"或者更高版本。 为此,请按以下步骤操作:

  1. 打开选项对话框( 工具-> 选项。) 。 ) 。
  2. 在left-hand树中,选择 项目和解决方案节点,然后选择构建并运行 。
    • 注意:如果这里节点不显示这里窗口,请确保已经选中 底部的对话框显示所有设置的复选框。
  3. 在出现的工具/选项页中,将项目生成输出详细级别 MSBuild 级别设置为详细 ( 在vs2008html或者older,假定你是在 vs2010sp1 ;正常就足够了) 。
  4. 生成项目并在输出窗口中查找。

检查MSBuild消息。 ResolveAssemblyReferences 任务是MSB3247的任务,它应该帮助你调试这个特定的问题。

我的具体案例是对 sql SqlServerCe的不正确引用。 参见下面。我有两个项目引用了两个不同版本的sql SqlServerCe 。 我使用旧版本转到项目,删除了引用,然后添加了正确的引用。


Target ResolveAssemblyReferences:
 Consider app.config remapping of assembly"System.Data.SqlServerCe,.. ." 
 from Version"3.5.1.0" [H:...DebugSystem.Data.SqlServerCe.dll] 
 to Version"9.0.242.0" [C:Program FilesMicrosoft Visual Studio 8Common7IDEPublicAssembliesSystem.Data.SqlServerCe.dll]
 to solve conflict and get rid of warning.
 C:WINDOWSMicrosoft.NETFrameworkv3.5Microsoft.Common.targets : 
 warning MSB3247: Found conflicts between different versions of the same dependent assembly.


不必打开每个程序集以确定引用程序集的版本。

  • 你可以检查每个引用的属性。
  • 打开项目属性并检查引用部分的版本。
  • 使用文本编辑器打开项目。
  • 使用. NET 反射器。

迈克 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

这是到达警告MSB3247底部的一种快得多的方法,而不是根据MSBuild输出。

...