因此,(看似)出乎意料的是,我的项目开始收到编译器警告 1685:

预定义的类型'system.runtime.compilerServices.extensionAttribute'在全局别名的多个组件中定义;使用来自“ C: Program Files Reference Assemblies Microsoft Framework V3.5 System.Core.core.dll'的定义”

困惑之余,我研究了 MSDN 文章以找出其原因。这是我找到的信息:

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

错误消息预定义的类型“ system.type名称”是在全局别名的多个组件中定义的;使用“文件名”中的定义

当在两个组件中找到预定义的系统类型(例如System.Int32)时,就会发生此错误。这可能发生的一种方法是,如果您是从两个不同的位置引用MSCORLIB,例如尝试运行.NET Framework版本1.0和1.1并排。

编译器将仅使用一个组件中的定义。编译器仅搜索全局别名,不会搜索定义 /参考的库。如果您已指定 /nostdlib,则编译器将搜索对象,并且将来启动所有搜索文件中找到对象的预定义类型。

现在我真是摸不着头脑。

  1. 我没有运行两个不同版本的.NET框架(除非您计算2.0和3.5)。

  2. 我没有提及任何可能让我怀疑的奇异集会。

  3. 我不记得对我的应用程序进行过任何会引发此更改的更改。

  4. 我已验证所有组件都面向 .NET Framework 版本 v2.0.50727。

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

真正让我烦恼的是我不知道 为什么 它正在发生。发生的事情应该有明显的原因,我应该知道为什么会发生。如果我不能解释它,我就无法准确地补救它。猜测永远不会令人满意。

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

  • 一个 C# 类库 DLL,提供封装数据库访问的基本功能。该 DLL 引用以下组件:

    • 系统
    • 系统核心
    • 系统.核心.数据
    • 系统数据
    • 系统.数据.数据集扩展
    • 系统.数据.OracleClient
    • 系统图
    • 系统.Windows.窗体
    • 系统.Xml
    • 系统.Xml.Linq
  • 提供 UI 的 C# Windows 窗体应用程序。该应用程序引用了以下组件:

    • 干净的代码
    • CleanCodeControls(这两者都提供语法编辑器支持,并且是针对 .NET 3.5 本地构建的)。
    • 林克桥
    • Roswell.Framework(上面的类库)
    • 系统
    • 系统核心
    • 系统数据
    • 系统.数据.数据集扩展
    • 系统.数据.OracleClient
    • 系统部署
    • 系统设计
    • 系统图
    • 系统.Windows.窗体
    • 系统.Xml
    • 系统.Xml.Linq

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

有帮助吗?

解决方案

LINQBridge 立即让我产生了怀疑。其全部目的是为 2.0 用户提供扩展属性/方法等。如果您有 3.5 (System.Core.dll),请不要使用 LINQBridge。如果你 由于某些晦涩的原因(我想不出)需要 3.5 中的 LINQBridge,那么您可能必须使用 extern 别名。但是我 真的 怀疑你需要它!

其他提示

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

System.Runtime.CompilerServices.ExtensionAttribute x = null;

构建时,会产生错误:

'system.runtime.compilerServices.extensionAttribute'c中存在'c: program files reference assemblies microsoft framework v3.5 v3.5 system.core.core.dll'and .....

并立即向您展示导致冲突的两个来源。

马克几乎肯定是正确的。这里有一个方法来验证

  1. 打开反射器.exe
  2. 添加所有非系统程序集
  3. F3 并搜索 ExtensionAttribute

如果它在 System.Core 之外的任何地方弹出,那么您就知道它来自哪里。

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

参考 -> 属性 -> 别名 -> 将“global”替换为其他内容

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

此问题的另一个解决方案 => 右键单击​​项目 -> 属性 -> 构建 -> 将警告视为错误 -> 无

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top