我收到一个奇怪的警告:
预定义类型'System.Runtime.CompilerServices.ExtensionAttribute'在全局别名中的多个程序集中定义;使用'c:\ Program Files \ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Core.dll'中的定义
没有给出行号,因此很难弄清楚它是什么。
编译器错误代码为CS1685
答案 0 :(得分:21)
你是否正在使用某人的dll(或你自己的)已经实现了这个属性(具有完全相同的名称)本身作为在.Net 3.5运行时使用某些c#3.0功能的方法? (一个常见的伎俩)
这是可能的原因。由于它使用了正确的(GAC中的MS),这不是问题,尽管你应该追捕另一个并删除它。
答案 1 :(得分:12)
扩展ShuggyCoUk的(正确的)答案
说实话,使用哪个版本的属性(GAC,第3部分等等)并不重要。重要的是C#/ VB编译器可以找到一些具有正确名称的属性。该属性在代码中不起作用。它纯粹是为了告诉编译器“嘿,这是一种扩展方法”。
您可以放心地忽略此警告。
答案 2 :(得分:11)
我同意ShuggyCoUk的观点,最好的做法是尝试删除有问题的dll。但这可能是不可能的。
解决编译器抱怨的歧义的另一种方法是更改引用的dll的别名。在您的项目中,在References文件夹中,如果单击引用的dll,您将看到Aliases属性。默认情况下,这是“全局”,它允许您执行“global :: SomeNamespace.SomeType”之类的操作。您可能只需将别名更改为其他内容。
这解决了我需要引用Microsoft.Scripting.Core.dll的问题,但它包含了一些与mscorlib.dll冲突的类型。我将Aliases属性更改为“ThirdParty”而不是“global”,并修复了警告。
答案 3 :(得分:1)
我有同样的问题。
在我的情况下,问题是程序集Mono.Cecil。
从本地引用迁移到nuget,当我添加NHibernate引用时,包会自动添加此引用。
此参考已删除,并再次编译我的项目。
删除它并开心!!
此图片来自ILSpy(http://i.stack.imgur.com/Qyd5o.png)
答案 4 :(得分:0)
编译器不知道哪个System.Runtime.CompilerServices.ExtensionAttribute
所以它使用来自c:\ Program Files \ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Core.dll'的定义
您使用的.dll可能具有相同的扩展名。
答案 5 :(得分:0)
我通过意外安装IIS而不是4.5安装IIS来触发此错误。
修复是在"添加功能中添加4.5 ..."在控制面板中。