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

C#编译器警告1685

如何解决《C#编译器警告1685》经验,为你挑选了5个好方法。

所以,(看似)突然之间,我的项目开始得到编译器警告1685:

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

困惑,我研究了MSDN文章,找出其原因.这是我发现的信息:

Visual C#参考:错误和警告编译器警告(级别1)CS1685

错误消息预定义类型"System.type name"在全局别名中的多个程序集中定义; 使用'文件名'中的定义

在两个程序集中找到预定义的系统类型(如System.int32)时,会发生此错误.这种情况的一种方法是,如果您从两个不同的位置引用mscorlib,例如尝试并行运行.Net Framework版本1.0和1.1.

编译器将仅使用其中一个程序集中的定义.编译器仅搜索全局别名,不搜索库定义/引用.如果已指定/ nostdlib,则编译器将搜索Object,并在将来启动所有搜索到找到Object的文件中的预定义类型.

现在我真的在挠头.

    我没有运行两个不同版本的.NET Framework(除非你算上2.0和3.5).

    我没有引用可能让我怀疑的任何奇怪的集会.

    我不记得对我的应用程序进行任何更改会刺激这种变化.

    我已经验证所有组件都针对.NET Framework版本v2.0.50727.

我愿意接受有关如何纠正此问题的建议或想法.我将警告视为错误,这让我发疯.

真正让我烦恼的是,我不知道它为什么会发生.发生的事情应该有一个可辨别的原因,我应该知道它们为什么会发生.如果我无法解释,我无法准确地解决它.猜测工作永远不会令人满意.

该应用程序很简单,由类库和Windows窗体应用程序组成.

AC#类库DLL提供封装数据库访问的基本功能.此DLL引用以下组件:

系统

System.Core程序

System.Core.Data

System.Data

System.Data.DataSetExtensions

System.Data.OracleClient的

System.Drawing中

System.Windows.Forms的

的System.Xml

System.Xml.Linq的

提供UI的AC#Windows Forms应用程序.此应用程序引用以下组件:

CleanCode

CleanCodeControls(这两者都提供语法编辑器支持,并且是针对.NET 3.5本地构建的).

LinqBridge

Roswell.Framework(上面的类库)

系统

System.Core程序

System.Data

System.Data.DataSetExtensions

System.Data.OracleClient的

System.Deployment

系统设计

System.Drawing中

System.Windows.Forms的

的System.Xml

System.Xml.Linq的

如果您需要更多信息,请告诉我,我很乐意提供.



1> Remco te Wie..:

另一种简单的验证方法:在您的代码中,暂时在某处使用该类.例:

System.Runtime.CompilerServices.ExtensionAttribute x = null;

构建时,这将产生错误:

类型'System.Runtime.CompilerServices.ExtensionAttribute'存在于'c:\ Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll'和.....

并立即向您显示导致冲突的两个来源.


凉.实际上我甚至不需要构建,只要我将该行粘贴到代码文件中,intellisense警告告诉我所有我需要知道的!
这是一个更好的一般答案.

2> Marc Gravell..:

LINQBridge让我立刻产生怀疑.这样做的全部意图是为2.0用户提供扩展属性/方法等.如果您有3.5(System.Core.dll),请不要使用LINQBridge.如果你确实需要LINQBridge 3.5中的某些不明原因(我想不出一个),那么你可能不得不使用extern别名.但我真的怀疑你需要它!



3> JaredPar..:

马克几乎肯定是正确的.这是一种验证方法

    打开Reflector.exe

    添加所有非系统程序集

    F3并搜索ExtensionAttribute

如果它弹出System.Core以外的任何地方,那么你知道它来自哪里.



4> VitalyB..:

此问题的另一个解决方案是为整个程序集使用全局别名:

参考 - >属性 - >别名 - >用其他东西替换'全局'



5> Efrain..:

仅供参考:我遇到了同样的问题,并且能够通过使用Resharper的"优化引用"命令来解决它,然后删除所有未使用的引用.不完全确定为什么会有效,但确实如此.

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