簡體   English   中英

CS0436:類型與導入的類型沖突

[英]CS0436: Type conflicts with the imported type

我使用“添加為鏈接”選項在多個程序集中包含相同源文件的實例。 我特別需要在這些程序集中包含相同來源的實例,因為它負責必須在程序集內部進行的許可證驗證。 跨模塊邊界執行許可證調用可能會帶來安全風險。

我的解決方案中包含該代碼的一些項目依賴於也包含該代碼的其他模塊,從而導致警告CS0436

“[licence.cs 完整路徑] 中的類型 [type] 與 [依賴項目還包括 licence.cs] 中的導入類型 [LicenceClass] 沖突。使用 [licence.cs 完整路徑] 中定義的類型”。

我曾嘗試聲明 class 別名,但 licence.cs 內部的定義會導致相同的警告。 在別名中,必須引用重復的 class 名稱,這會導致相同的警告。

我知道在程序集之間復制源代碼是不好的做法,但在這種情況下是有意的。 我寧願保留每個程序集鏈接到的中央實例,而不是保留具有重命名類的專用實例以避免警告。

我的解決方法是使用#pragma忽略警告。 有更優雅的解決方案嗎?

值得注意的是,獲得此類警告的另一種方法是簡單地在 Visual Studio 中設置一個項目來引用自身:參考 -> 解決方案 -> 等等(我如何想出這個 gem 留給讀者作為練習...... )

Visual Studio 很樂意遵守,只是在構建期間拋出 OP 所描述類型的警告牆,這是可以預料的(根據反射),因為每個類等都被定義了兩次。

唯一發生沖突的時間是兩個依賴類包含相同的類。 有兩種解決方法:

  1. 在導致 CS0436 的類中禁用警告:

     #pragma warning disable 0436
  2. 有一個單獨的類實例,在每個客戶端項目中唯一命名(從維護的角度來看是不可取的)。

編輯:還有一個解決方案:按照馬克在下面的建議進行操作,並將重復的類標記為internal

當我遷移到 VS2015 時,我有一個從 ASP.NET 3.5 轉換為 4.5 的 Web 應用程序。 我開始將此視為警告,但解決方案仍會編譯。 沒有循環引用,清理解決方案並刪除binobj文件夾也無濟於事。

事實證明,VS2015 對 App_Code 文件夾中的一些類並不滿意。 此處的類與父文件夾中的其余網頁具有相同的命名空間。 一旦我將這些類從 App_Code 文件夾移到 Web 應用程序的頂層,警告就消失了。

在 .NET Core 中,您還可以禁用 project.json 中的警告:

{
  "buildOptions":
  {
    "nowarn":
    [
      "CS0436"
    ]
  }
}

我有這個錯誤,但沒有 2 個不同的類!
每個新類都與自身發生沖突,因此顯然我遇到了CS0436 Error

經過一番努力,我發現這是我在多人 Unity 項目中使用的Mirror Asset Mirror 以某種方式包含了我創建的每個新類(並從NetworkBehavior繼承)。

我的外部編輯器是VSCode (visual studio code,解決方案可能也適用於visual studio)。

解決方案


Edit / Preferences / External tools / "Generate .csproj files for:"
我開始測試不同的設置,這對我有用:
(不確定確切的設置是否適用於所有人,但項目中沒有正確的文件會導致此錯誤。就像我的情況。)

應用這些設置(或適合您的項目的設置)后,單擊Regenerate project files並重新啟動 Unity 和 VSCode。

我遇到過這樣的情況,臨時刪除一些源文件,稍后再恢復。 碰巧 IDE(在我的例子中是 Rider)試圖恢復類,所以當它們丟失時,它只是添加了對生成的 exe 的引用。 顯然,當我恢復文件時,它們看起來是重復的。 插入的參考 IDE 看起來像這樣,只需將其刪除即可修復:

<Reference Include="AppName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
  <HintPath>bin\x86\Debug\AppName.exe</HintPath>
</Reference>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM