c# - C#編譯器警告1685




.net compiler-warnings (6)

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

所以,(看似)突然之間,我的項目開始得到編譯器警告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的

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


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

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


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


馬克幾乎肯定是正確的。 這是一種驗證方法

  1. 打開Reflector.exe
  2. 添加所有非系統程序集
  3. F3並蒐索ExtensionAttribute

如果它彈出System.Core以外的任何地方,那麼你知道它來自哪裡。


另一種簡單的驗證方法:在您的代碼中,暫時在某處使用該類。 例:

System.Runtime.CompilerServices.ExtensionAttribute x = null;

構建時,這將產生錯誤:

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

並立即向您顯示導致衝突的兩個來源。


你有沒有嘗試sylk?

我們過去常常用asp來生成excelsheets,現在我們也在尋找一個excelgenerater。

sylk的優點是,你可以格式化單元格。







c# .net compiler-warnings