2010-08-08 92 views
21

我在窗體中有下面的代碼,並試圖找到一種方法來加載名爲DataObjects的窗體引用的項目程序集。使用下面的代碼,我只列出了六個程序集。查看錶單所在項目的引用,有十三個程序集引用。這裏有什麼問題?GetReferencedAssemblies不會返回所有程序集

​​

回答

28

您能否檢查程序集的清單以查看此處引用的內容?

如果不使用它們,C#編譯器往往會從清單中刪除引用的程序集。因此,如果您沒有引用程序集B中的任何類型,或僅引用程序集B中的常量(由編譯器內聯),則不會有此引用。

+6

有沒有辦法強制'未使用'程序集被加載? – ProfK 2010-08-08 12:09:11

+0

Assembly.Load()如果您知道要在當前域中加載的地方,或者編寫一些虛擬代碼來引用「未使用」程序集中的類型。 – 2010-08-08 12:49:46

+2

我相信你(我現在正遇到同樣的問題),但是你碰巧有一個來源? – edhedges 2015-04-09 20:36:59

7

編譯器將不在輸出程序集中包含代碼中實際未使用的程序集引用。

只有從代碼中使用的程序集纔會在輸出程序集中被引用。

+0

「在代碼中沒有實際使用」 - 我認爲這應該寫作不同。當我調用的東西依賴於通過反射發現的類型(在我的情況下,通過MEF)時,會使用這些類型*。也就是說,如果編譯器沒有刪除引用並因此導致我的應用程序崩潰,就會使用它們。 – 2017-04-19 11:06:33