C#編譯器警告1685




.net compiler-warnings (4)

所以,(看似)突然之間,我的項目開始得到編譯器警告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的文件中的預定義類型。

現在我真的在撓頭。

  1. 我沒有運行兩個不同版本的.NET Framework(除非你算上2.0和3.5)。

  2. 我沒有引用可能讓我懷疑的任何奇怪的集會。

  3. 我不記得對我的應用程序進行任何更改會刺激這種變化。

  4. 我已經驗證所有組件都針對.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的

如果您需要更多信息,請告訴我,我很樂意提供。


LINQBridge讓我立刻產生懷疑。 這樣做的全部意圖是為2.0用戶提供擴展屬性/方法等。 如果您有3.5(System.Core.dll),請不要使用LINQBridge。 如果你確實需要LINQBridge 3.5中的某些不明原因(我想不出一個),那麼你可能不得不使用extern別名。 但我真的懷疑你需要它!


僅供參考:我遇到了同樣的問題,並且能夠通過使用Resharper的“優化引用”命令來解決它,然後刪除所有未使用的引用。 不完全確定為什麼會有效,但確實如此。


此問題的另一個解決方案=>右鍵單擊項目 - >屬性 - >構建 - >將警告視為錯誤 - >無


此問題的另一個解決方案是為整個程序集使用全局別名:

參考 - >屬性 - >別名 - >用其他東西替換'全局'





compiler-warnings