. net 3.5解决方案在使用msbuild编译时出现此警告。
有时NDepend可能会有所帮助,但在这种情况下,它没有提供任何进一步的细节。像Bob一样,我最终不得不在ILDASM中打开每个程序集,直到找到引用依赖程序集的旧版本。
我确实尝试使用VS 2010 Beta 2的MSBUILD(连接文章指出这在CLR的下一个版本中得到了修复),但也没有提供更多的细节(可能是在Beta 2后修复的)。
有没有更好的(更自动化的)方法?
. net 3.5解决方案在使用msbuild编译时出现此警告。
有时NDepend可能会有所帮助,但在这种情况下,它没有提供任何进一步的细节。像Bob一样,我最终不得不在ILDASM中打开每个程序集,直到找到引用依赖程序集的旧版本。
我确实尝试使用VS 2010 Beta 2的MSBUILD(连接文章指出这在CLR的下一个版本中得到了修复),但也没有提供更多的细节(可能是在Beta 2后修复的)。
有没有更好的(更自动化的)方法?
当前回答
使用依赖项阅读器
使用dep.exe,您可以列出整个文件夹的所有嵌套依赖项。 与grep或awk等unix工具结合使用,它可以帮助您解决问题
查找在多个版本中引用的程序集
$ 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.exe,然后将输出两次输送到awk
将父节点和子节点放在一列中(默认情况下,每行包含一个父节点和一个子节点,以表示这个父节点依赖于那个子节点) 然后使用关联数组进行一种“group by”
了解这个组件是如何被拉进你的箱子的
$ 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
在这个例子中,这个工具会告诉你System.Web.Http 5.2.3来自你对FooLib的依赖,而4.0.0版本来自BarLib。
那么你可以在两者之间做出选择
说服库的所有者使用相同的版本 停止使用其中之一 在配置文件中添加绑定重定向以使用最新版本
如何在Windows中运行这些东西
如果你没有unix类型的shell,你需要在运行awkward和grep之前下载一个。试试下面的一种方法
CMDER + awk + dep.exe Gitbash + awk + dep.exe 天鹅座+德.exe
其他回答
Visual Studio for Mac Community新增:
由于AMissico的回答需要更改日志级别,而ASMSpy和ASMSpyPlus都不能作为跨平台解决方案,下面是Visual Studio for Mac的一个简短补充:
https://learn.microsoft.com/en-us/visualstudio/mac/compiling-and-building
它在Visual Studio社区→首选项…→项目→构建日志→冗长
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底部的更快方法。
此警告产生于默认ASP。NET MVC 4测试版 在这里看到的
中,此警告的任何强制转换都可以通过手动编辑 .csproj文件。 修改……: Reference Include="System.Net.Http" 阅读......: Reference Include="System.Net. "Http, Version = 4.0.0.0 "
最简单的方法是不考虑(内部)依赖关系:
打开“解决方案资源管理器”。 点击“显示所有文件” 扩大“引用” 您将看到一个(或多个)引用与其他引用的图标略有不同。通常情况下,它会有一个黄色的方框,建议你记下它。把它拿掉。 重新添加引用并编译代码。 这是所有。
在我的例子中,MySQL引用有一个问题。以某种方式,我可以在所有可用引用的列表下列出它的三个版本。我遵循了上面的方法1到6,它对我很有效。
我发现(至少在Visual Studio 2010中),您需要将输出详细信息设置为至少详细的,以便能够发现问题。
这可能是我的问题是一个参考,以前是一个GAC参考,但这不再是我的机器重新安装后的情况。