33

我收到一个奇怪的警告:

预定义类型 'System.Runtime.CompilerServices.ExtensionAttribute' 在全局别名中的多个程序集中定义;使用来自 'c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll' 的定义

没有给出行号,所以很难弄清楚它是关于什么的。

编译器错误代码是CS1685

4

6 回答 6

21

您是否正在使用某人的 dll(或您自己的)本身已经实现了此属性(具有完全相同的名称)作为在 .Net 3.5 运行时之前使用某些 c# 3.0 功能的一种方式?(一个常见的技巧)

这是可能的原因。因为它使用的是正确的(GAC 中的 MS),所以这不是问题,尽管您应该找到另一个并将其删除。

于 2009-02-13T17:20:19.140 回答
12

扩展 ShuggyCoUk 的(正确)答案

说实话,使用哪个版本的属性并不重要(GAC、第 3 部分等)。重要的是 C#/VB 编译器可以找到一些具有正确名称的属性。该属性在代码中没有任何功能用途。它的存在纯粹是为了告诉编译器“嘿,这是一种扩展方法”。

您可以放心地忽略此警告。

于 2009-02-13T17:22:31.960 回答
11

我同意 ShuggyCoUk 的观点,即最好的做法是尝试删除有问题的 dll。不过,这可能是不可能的。

解决编译器抱怨的歧义的另一种方法是更改​​引用的 dll 的别名。在您的项目中,在 References 文件夹中,如果单击引用的 dll,您将看到 Aliases 属性。默认情况下,这是“global”,它允许您执行“global::SomeNamespace.SomeType”之类的操作。您可能只需将别名更改为其他名称。

这解决了我需要引用 Microsoft.Scripting.Core.dll 的问题,但它包含一些与 mscorlib.dll 冲突的类型。我将 Aliases 属性更改为“第三方”而不是“全局”,从而修复了警告。

于 2011-04-28T21:45:05.937 回答
1

我也有同样的问题。

在我的情况下,问题是程序集 Mono.Cecil。

从本地引用迁移到 nuget,当我添加 NHibernate 引用时,包会自动添加此引用。

此引用已被删除,并再次编译了我的项目。

删除它并快乐!

这张图片取自 ILSpy ( http://i.stack.imgur.com/Qyd5o.png )

于 2014-03-05T06:02:16.987 回答
0

编译器不知道哪个 System.Runtime.CompilerServices.ExtensionAttribute

所以它使用来自 c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll' 的定义

您正在使用的 .dll 可能具有相同的扩展名。

于 2009-02-13T17:22:08.623 回答
0

我通过使用 .NET 3.5 而不是 4.5 安装 IIS 意外触发了此错误。

修复是在控制面板的“添加功能...”中重新添加 4.5。

于 2015-06-02T14:13:45.693 回答