aspnet_compiler.exe在全局别名中查找多个类型,但我不能!

时间:2011-04-26 21:31:35

标签: asp.net aspnet-compiler

今天继承一个新项目,试图让数百个警告消失,并对此感到困惑。 ASP.NET MVC 2,框架4.0项目在VS2010中编译得很好,但是当构建过程交给aspnet_compiler.exe时,我得到以下内容(从“输出”窗口剪切并粘贴):

AfterBuild:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v temp -p C:\data\crecare\CreCare20110403\CreCare.Mvc\\..\CreCare.Mvc 
ASPNETCOMPILER : warning CS1685: The predefined type 'System.Runtime.CompilerServices.ExtensionAttribute' is defined in multiple assemblies in the global alias; using definition from 'c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Core.dll'

对象浏览器中的搜索和项目中引用的冗长的逐个程序集审查都不会显示任何多重定义。据我所知,前一个团队没有尝试在以前的ASP.NET版本中构建任何扩展(one cause of this error, I have learned);我认为这从一开始就针对4.0。

这只是一个警告,我想我可以忽略它(你甚至不能/现在使用aspnet_compiler.exe,所以我必须看看它们) - 但它让我感到不对劲。关于如何追捕这个的任何建议?应该在项目的路径中“\ .. \”让我担心吗?我正在运行64位窗口;它不是同时关注x86和64?

值得注意的是,在解决方案中使用VS2010中的对象浏览器只能找到aspnet_compiler.exe找到的程序集中的类型;搜索该类型只能得到一个结果。 aspnet_compiler.exe是否在寻找VS2010没有的地方?

1 个答案:

答案 0 :(得分:1)

就像你说的那样是由于Mono.Cecil。

如果您对Mono.Cecil.Dll有引用并实现扩展方法/,则此警告可能会成为错误,因为在编译时优先使用Mono.Cecil实现。

我不明白为什么应该用于.net 4的db4o程序集没有考虑到这一点,但我们可以确认相同的问题,因为我们已经查看了相同的问题。

只要你只复制输出Mono.Cecil(我们添加为链接并将其设置为复制到输出)而不是使用普通引用,一切正常。警告很烦人,但考虑到db4o上这些程序集的奇怪情况,我们现在不打算处理它的源代码。