解决MSB3247

百般思念 提交于 2020-02-28 07:41:25

在使用msbuild进行编译时,.NET 3.5解决方案最终出现此警告。

有时NDepend可能有所帮助,但在这种情况下,它没有提供任何进一步的细节。 像Bob一样,我最终不得不在ILDASM中打开每个程序集,直到找到引用旧版依赖程序集的程序集。

我确实尝试使用VS 2010 Beta 2中的MSBUILD(因为Connect文章表明这​​已经在下一版本的CLR中得到修复)但是它没有提供任何更多细节(可能在Beta 2后修复)

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


#1楼

为默认的ASP.NET MVC 4 beta生成此警告, 请参见此处

在,可以通过手动编辑项目的.csproj文件来消除任何强制转换此警告。

修改........:参考包含=“System.Net.Http”

阅读......:参考包含=“System.Net.Http,Version = 4.0.0.0”


#2楼

如前所述在这里 ,你需要删除未使用的引用,并警告会去。


#3楼

将“MSBuild项目构建输出详细程度”更改为“详细”或更高版本。 为此,请按照下列步骤操作:

  1. 打开“选项”对话框(“ 工具” - >“选项...” )。
  2. 在左侧树中,选择“ 项目和解决方案”节点,然后选择“ 生成并运行”
    • 注意:如果此节点未显示,请确保选中“ 显示所有设置 ”对话框底部的复选框。
  3. 在出现的工具/选项页面中,根据您的版本将MSBuild项目构建输出详细级别设置为适当的设置:

  4. 构建项目并查看输出窗口。

查看MSBuild消息。 ResolveAssemblyReferences任务(MSB3247发起的任务)应该可以帮助您调试此特定问题。

我的具体情况是对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.

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

  • 您可以检查每个参考的属性。
  • 打开项目属性并检查“引用”部分的版本。
  • 使用文本编辑器打开项目。
  • 使用.Net Reflector。

#4楼

没有考虑(内部)依赖关系的最简单方法:

  1. 打开“Solution Explorer”。
  2. 点击“显示所有文件”
  3. 展开“参考”
  4. 您会看到一个(或多个)引用的图标与其他引用略有不同。 通常,它是黄色框,建议你记下它。 只需删除它。
  5. 添加引用并编译代码。
  6. 就这样。

就我而言,MySQL引用存在问题。 不知何故,我可以在所有可用引用列表下列出它的三个版本。 我按照上面的过程1到6进行了操作,它对我有用。


#5楼

我发现(至少在Visual Studio 2010中)您需要将输出详细程度设置为至少详细以便能够发现问题。

可能是我的问题是以前作为GAC参考的引用,但在我的机器重新安装后不再是这种情况。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!