簡體   English   中英

在未引用的程序集中定義的 C# 類型

[英]C# type defined in an assembly that is not referenced

我有兩個項目 A 和 B。項目 A 在項目 B 中使用類型 X,所以我在 A 中添加了對 B 的引用。一切都很好。

我使用強命名密鑰文件簽署了項目 B。 一切仍然很好。

然后我決定更改 B 的強命名密鑰文件。我重建了項目 B ok。 當我嘗試構建項目 AI 時收到錯誤“錯誤 1 ​​類型 X 在未引用的程序集中定義。您必須添加對程序集 B 的引用,版本=1.0.0.0,文化=中性,PublicKeyToken=95b41b0d6571627b”。 ”

所以我刪除了項目 A 中的引用並重新添加了它,不高興。 我可以 dbl 單擊項目 A 中的項目 B 引用,打開對象瀏覽器並在那里看到類型 X 確定。 我還完全限定了 A 中的 X 型對象,並且智能感知很好地拾取了它們,但它仍然無法構建。

我認為更改密鑰文件可能需要進行修訂,因此我將程序集 B 版本更改為 2.0.0.0,但 A 仍然抱怨它需要版本 1.0.0.0。 查看 A 中 B 引用的屬性,它肯定指向正確的版本,並且確實顯示為 2.0.0.0

我可以忍受使用現有的密鑰文件,但如果可能的話,我想了解我哪里出錯了。

根據您在評論中所說的,我會說這絕對是項目 A 的問題。

也許這些步驟將有助於解決它:

  1. 刪除對項目 B 的引用並保存
  2. 用記事本或其他東西破解打開 .csproj 文件
  3. 在那里查找對項目 B 的任何引用(可能是一個提示路徑節點)並刪除該節點。
  4. 如果項目 A 恰好是 ASP.NET 項目,請查看您的 web.config 或 aspx 頁頭以查找對項目 B 的任何引用。

刪除對項目的所有引用后,按照瓶頸建議重新加載項目,看看是否能解決問題。

抱歉回復晚了,但這對我有幫助:

(假設您目前有 AnyCPU 解決方案平台)

  • 將解決方案平台切換到 x86。
  • 編譯
  • 切換回來
  • 再次編譯。

對我有用的是刪除對項目的引用,然后重新添加它。 出現了一條新的錯誤消息,指出我需要引用缺少的第三個庫,因此原始消息有點誤導!

為了幫助人們從 Google 到達這里, Merlyn關於延遲簽名的評論是我的答案。

我在引用延遲簽名的程序集 A 時遇到此錯誤,該程序集 A 引用了程序集 B 中定義的類型 X。我收到了未引用 B 的錯誤(我已經在引用 B 的簽名版本)。

解決方法是找到並引用 A 的簽名版本。

您可以嘗試編輯項目 A 的項目文件 (projectA.csproj)。 為此,請通過 Visual Studio 右鍵單擊​​項目-> 卸載項目,然后右鍵單擊已卸載的項目-> 編輯文件。 在那里搜索對項目 B 的引用,並根據需要嘗試更正

這也發生在我身上。

就我而言,問題在於解決方案 AI 引用了解決方案 B 中的項目(我從 B 更改了項目名稱)。 當我嘗試編譯 A 時,它試圖在 B 中找到項目的舊名稱。

我再次添加了這個項目的新引用,重新編譯等等,但不幸的是它不起作用。

當我再次在 A 中添加 B 的所有引用時,問題得到解決。我正在加載用 B 的舊項目編譯的舊 DLL。這些 DLL 與舊引用有某種交叉交互。

我希望這對其他人有用。

如果 x 繼承了 A 你必須在 B 中引用它

暫無
暫無

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

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