代码之家  ›  专栏  ›  技术社区  ›  Mike Hofer

C#编译器警告1685

  •  45
  • Mike Hofer  · 技术社区  · 17 年前

    预定义的类型 'System.Runtime.CompilerServices.ExtensionAttribute' 在中的多个程序集中定义 来自“c:\Program Files\Reference”

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

    Visual C#参考:错误和错误 CS1685

    预定义类型的错误消息 “System.type name”是在中定义的 全局数据库中的多个程序集 别名使用“文件”中的定义 名字'

    system.int32等系统类型为 在两个程序集中找到。单程 来自两个不同地方的mscorlib, 例如尝试运行.Net 框架版本1.0和1.1 肩并肩。

    编译器将使用该定义 仅从其中一个程序集。这个 编译器只搜索全局别名, /参考资料。如果您已经指定 /Nostlib,编译器将进行搜索 为对象,并在将来开始 在中对预定义类型的所有搜索 找到对象的文件。

    现在我真的抓狂了。

    1. .NET Framework的版本 (除非你数2.0和3.5)。

    2. 可能会让我 可疑的

    我愿意接受关于如何纠正这一点的建议或想法。我把警告视为错误,这让我发疯。

    为什么? 它正在发生。发生的事情应该有明显的原因,我应该知道为什么会发生。如果我不能解释它,我就不能准确地纠正它。猜测永远不会令人满意。

    该应用程序非常简单,由类库和windows窗体应用程序组成。

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

      • 系统
      • 系统核心数据
      • System.Data.DataSetExtensions
      • System.Data.OracleClient
      • 系统图
      • 命名空间
    • 提供UI的C#Windows窗体应用程序。此应用程序引用以下组件:

      • 清除码
      • CleanCodeControl(这两个控件都提供语法编辑器支持,并且是针对.NET3.5本地构建的)。
      • 林克布里奇
      • Framework(上面的类库)
      • 系统核心
      • System.Data.DataSetExtensions
      • System.Data.OracleClient
      • 系统设计
      • System.Windows.Forms
      • 命名空间
      • System.Xml.Linq

    6 回复  |  直到 10 年前
        1
  •  99
  •   Noctis    9 年前

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

    System.Runtime.CompilerServices.ExtensionAttribute x = null;
    

    在两个'c:\Program Files\Reference'中 程序集\Microsoft\Framework\v3.5\System.Core.dll'和。。。。。

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

        2
  •  22
  •   Marc Gravell    17 年前

    林克布里奇让我立刻产生怀疑。其全部目的是为2.0用户提供扩展属性/方法等。如果您有3.5(System.Core.dll),不要使用LINQBridge。如果你 由于一些模糊的原因(我想不出原因),需要3.5中的LINQBridge,那么您可能必须使用外部别名。但我 我怀疑你需要它!

        3
  •  22
  •   JaredPar    17 年前

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

    1. 添加所有非系统程序集

        4
  •  9
  •   VitalyB    15 年前

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

    参考->房地产->别名->将“全局”替换为其他内容

        5
  •  5
  •   Efrain    14 年前

    仅供参考:我也遇到了同样的问题,可以通过使用Resharper的“优化引用”命令,然后删除所有未使用的引用来解决。不完全确定 为什么? 这很管用,但确实管用。

        6
  •  -4
  •   Cipher    11 年前

    此问题的另一个解决方案=>右键单击项目->房地产->建造->将警告视为错误->没有一个