因此,(似乎)出乎意料的是,我的项目开始收到编译器警告 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.Data.DataSetExtensions
- System.Data.OracleClient
- 系统绘图
- System.Windows.Forms
- 系统文件
- System.Xml.Linq
AC# Windows 窗体应用程序提供 UI。此应用程序引用以下组件:
- 清洁代码
- CleanCodeControls(两者都提供语法编辑器支持,并且是针对 .NET 3.5 在本地构建的)。
- 灵桥
- Roswell.Framework(上面的类库)
- 系统
- 系统核心
- 系统数据
- System.Data.DataSetExtensions
- System.Data.OracleClient
- 系统部署
- 系统设计
- 系统绘图
- System.Windows.Forms
- 系统文件
- System.Xml.Linq
如果您需要更多信息,请告诉我,我很乐意提供。