2009-03-02 220 views
43

所以,(貌似)出藍色的,我的項目開始獲得編譯器警告1685:C#編譯器警告1685

The predefined type 'System.Runtime.CompilerServices.ExtensionAttribute' is defined in multiple assemblies in the global alias; using definition from 'c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll'

困惑,我研究的MSDN文章,找出其原因。這裏是我發現的信息:

Visual C# Reference: Errors and Warnings Compiler Warning (level 1) CS1685

Error Message The predefined type 'System.type name' is defined in multiple assemblies in the global alias; using definition from 'File Name'

This error occurs when a predefined system type such as System.int32 is found in two assemblies. One way this can happen is if you are referencing mscorlib from two different places, such as trying to run the.Net Framework versions 1.0 and 1.1 side-by-side.

The compiler will use the definition from only one of the assemblies. The compiler searches only global aliases, does not search libraries defined /reference. If you have specified /nostdlib, the compiler will search for Object, and in the future start all searches for predefined types in the file where it found Object.

現在我真的很撓我的腦袋。

  1. 我不是運行兩個不同的版本 .NET框架 的(除非你把2.0和3.5)。

  2. 我沒有參考任何奇怪的 程序集,可能會使我 可疑。

  3. 我不記得對我的應用程序進行任何可能會引發此更改的更改。

  4. 我已驗證所有組件的目標是.NET Framework版本v2.0.50727。

我很樂意接受有關如何解決此問題的建議或想法。我把警告視爲錯誤,這讓我發瘋。

真的讓我感到困擾的是,我不知道爲什麼它的發生。發生的事情應該有一個可辨別的原因,我應該知道他們爲什麼發生。如果我無法解釋它,我無法準確補救它。猜測永遠不會令人滿意。

該應用程序很簡單,由一個類庫和一個Windows窗體應用程序組成。

  • C#類庫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的
  • 一個C#Windows窗體應用程序提供UI。此應用程序引用以下組件:

    • CleanCode
    • CleanCodeControls(這些提供語法編輯器支持,並建立本地對.NET 3.5)。
    • LinqBridge
    • Roswell.Framework(上面的類庫)
    • 系統
    • System.Core程序
    • System.Data
    • System.Data.DataSetExtensions
    • System.Data.OracleClient的
    • System.Deployment
    • System.Design
    • System.Drawing中
    • System.Windows.Forms的
    • 的System.Xml
    • System.Xml.Linq的

讓我知道如果你需要更多信息,我會很樂意提供它。

+0

看到以下內容:http://stackoverflow.com/questions/546819/strange-警告關於擴展屬性 建議你關閉這個問題它是一個確切的重複 – ShuggyCoUk 2009-03-02 16:22:46

+0

順便說一句,這確實是LinqBridge這是造成這種情況,你不再需要它 – ShuggyCoUk 2009-03-02 16:23:26

+0

我做了一個警告號碼搜索,找不到任何問題包含它;我爲重複道歉。順便說一句,LinqBridge事實上是這個問題。謝謝! – 2009-03-02 16:29:22

回答

22

LINQBridge讓我立即懷疑。這整個意圖是爲2.0用戶提供擴展屬性/方法等。如果你有3.5(System.Core.dll),不要使用LINQBridge。如果你需要3.5中的LINQBridge出於一些晦澀的原因(我想不出一個),那麼你可能不得不使用一個外部別名。但我真的懷疑你需要它!

+0

是的,那是原因,好吧!太感謝了! – 2009-03-02 16:29:56

22

馬克幾乎肯定是正確的。這裏有一個方法來驗證

  1. 打開Reflector.exe
  2. 將所有
  3. F3的非系統組件和搜索ExtensionAttribute

如果它的任何地方彈出除了System.Core程序,那麼你知道它來自哪裏。

9

對於此問題的另一個解決方案是使用一個全球性的別名整機組裝:

參考 - >屬性 - >別名 - >替換「全球」別的東西

90

另一種簡單的方法來驗證: 在你的代碼中,臨時使用某個地方的類。 例子:

System.Runtime.CompilerServices.ExtensionAttribute x = null; 

建設時,這會產生錯誤:

The type 'System.Runtime.CompilerServices.ExtensionAttribute' exists in both 'c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll' and .....

而你立即顯示在2個源引起衝突。

5

僅供參考:我有同樣的問題,並能夠通過使用Resharper的「優化引用」命令,然後刪除所有未使用的引用來解決它。不完全確定爲什麼有效,但它確實。

-3

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