当前位置:  开发笔记 > 编程语言 > 正文

关于ExtensionAttribute的奇怪警告

如何解决《关于ExtensionAttribute的奇怪警告》经验,为你挑选了3个好方法。

我收到一个奇怪的警告:

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

没有给出行号,所以很难弄清楚它是什么.

编译器错误代码是CS1685



1> ShuggyCoUk..:

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

这是可能的原因.由于它使用的是正确的(GAC中的MS),因此虽然您应该追捕另一个并将其删除,但这不是问题.


在我的例子中,它是Newtonsoft.Json.dll版本7.0.1.18503.奇怪的是,只有当我将项目的TargetFrameworkVersion从v4.5升级到v4.5.1时,它才开始产生这个警告

2> JaredPar..:

扩展ShuggyCoUk的(正确的)答案

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

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



3> Ron..:

我同意ShuggyCoUk的观点,最好的做法是尝试删除违规的dll.但这可能是不可能的.

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

这解决了我需要引用Microsoft.Scripting.Core.dll的问题,但它包含一些与mscorlib.dll冲突的类型.我将Aliases属性更改为"ThirdParty"而不是"global",并修复了警告.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有