簡體   English   中英

調試錯誤“類型'xx'在未引用的程序集中定義”

[英]Debugging error “The Type 'xx' is defined in an assembly that is not referenced”

完整錯誤如下:

類型'System.Windows.Forms.Control'在未引用的程序集中定義。 您必須添加對程序集'System.Windows.Forms,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的引用。

它指向庫項目中第一個類中的第一個語句(Debug.Assert行),它不需要System.Windows.Forms (或者我認為)。 我知道如何解決它:添加提到的參考。 但是,我如何找出導致此錯誤的庫,或者更好的是,使用WinForms庫觸發了哪些代碼?

通常,您可以添加引用其他庫的庫,但只需在實際使用時添加對其他庫的引用。


編輯:替代解決方案

使用Microsoft框架工具中的綁定日志查看器Fuslogvw.exe也可以解決此問題或類似問題。 它顯示了應用程序綁定的程序集的所有嘗試和成功。

我懷疑你的代碼沒有引起這種情況,因為你說你沒有使用System.Windows.Forms類型,編譯器錯誤並沒有指向代碼的(有用)行。

我認為正在發生的是你引用了一個庫,它有一個公開可見的方法或屬性,它返回一個System.Windows.Forms.Control或者將一個作為參數。 無論你是否真的最終調用該方法/屬性,它的公開可見意味着你自己的代碼必須能夠解析庫正在使用的所有類型。 如果庫內部僅使用System.Windows.Forms,則不會遇到此問題。

它還意味着只是查看你所依賴的程序集的依賴關系可能只是縮小了嫌疑人列表的范圍,因為可能有一些程序集在內部依賴System.Windows.Forms(沒問題)和一個故障排除程序集具有SWForms程序集中類型的公共參數/返回值。

我的建議是你只是在沒有引用SWForms的情況下設置一個空項目,然后依次添加每個依賴項並嘗試在每個項目之后進行編譯。

我有同樣的錯誤。

問題是我使用了一個項目的引用,它在里面使用了System.Windows.Forms。

解決方案是在項目中添加對System.Windows.Forms的引用。

使用NDepend或Reflector或對象瀏覽器之類的東西來檢查您所依賴的程序集的依賴關系。

鑒於上述信息,我想不出任何其他方式。

暫無
暫無

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

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