我收到一个奇怪的警告:
预定义类型"System.Runtime.CompilerServices.ExtensionAttribute"在全局别名中的多个程序集中定义; 使用'c:\ Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll'中的定义
没有给出行号,所以很难弄清楚它是什么.
编译器错误代码是CS1685
您是否正在使用已经实现此属性(具有完全相同的名称)的某人的dll(或您自己的)作为在.Net 3.5运行时使用某些c#3.0功能的方法?(一个常见的技巧)
这是可能的原因.由于它使用的是正确的(GAC中的MS),因此虽然您应该追捕另一个并将其删除,但这不是问题.
扩展ShuggyCoUk的(正确的)答案
说实话,使用哪个版本的属性(GAC,第3部分等)并不重要.重要的是C#/ VB编译器可以找到一些具有正确名称的属性.该属性在代码中不起作用.它纯粹是为了告诉编译器"嘿,这是一种扩展方法".
您可以放心地忽略此警告.
我同意ShuggyCoUk的观点,最好的做法是尝试删除违规的dll.但这可能是不可能的.
解决编译器抱怨的歧义的另一种方法是更改引用的dll的别名.在您的项目中,在References文件夹中,如果单击引用的dll,您将看到Aliases属性.默认情况下,这是"全局",它允许您执行"global :: SomeNamespace.SomeType"之类的操作.您可能只需将别名更改为其他内容即可.
这解决了我需要引用Microsoft.Scripting.Core.dll的问题,但它包含一些与mscorlib.dll冲突的类型.我将Aliases属性更改为"ThirdParty"而不是"global",并修复了警告.