2009-10-01 55 views
2

信封:.NET/VS2008即使未調用引用的DLL,也可以加載它嗎?

大家好,

我的應用程序使用在某些系統上(明確)單獨安裝第三方DLL組件,但不是所有的人。

這意味着在某些系統上,DLL不存在,因此一定不能調用。爲了解決這個問題,我有2個版本的應用程序(使用2個配置)用於2個用例。在其中一箇中,所有對DLL的調用都被#出來了。

由於存在於應用程序在所有編譯DLL(他們#if'ed出)沒有電話,它是安全的假設,該應用程序不會嘗試加載DLL,即使它被引用?

還是我應該排除參考?

注:在被問到反應womp的評論中this question

TIA,

回答

3

IIRC,C#編譯器將省略對代碼中從未實際使用的dll的引用。所以如果所有的代碼都在#if之內,那麼在編譯的應用程序中,對dll的引用將不會存在,並且dll將永遠不會被加載。

順便說一下,您可以使用反射器來檢查。只需拖動&將已編譯的應用程序放入反射器,然後查看參考節點。 ILDASM也提供了這個功能,我想。

注意:DllImport s和動態類型加載(例如,Type.GetType("type,dll"))將動態加載dll,而C#編譯器不知道或關心。但是,如果在正確的#if之內,則不會加載任何內容。

+1

你沒記錯! :-) – 2009-10-01 19:20:01

0

你是安全與參考,但沒有實際的DLL,如果你從來沒有(明顯)實例化和引用的類,絕不是指類的實例化的任何或引用對象。

通常您的DLL將被載入第一次引用類的類構造函數運行。

HTH 月

+0

不好意思回答你的問題,你是安全的一個參考,但沒有實際的DLL,如果你從來沒有(明顯)實例化和引用的類,從來沒有引用類的任何實例或引用的對象。 – 2009-10-01 12:41:03

0

我將它排除在外。它可能會加載它,無論是什麼,如果你有一個類型引用,那也可能會導致一個問題。

0

如果需要/可用,爲什麼不動態加載程序集?然後如果它在以後的日期被添加,你可以使用它?你也只需要一個版本的應用程序。

+0

這就是我最終會做的。案件發生在緊急支援電話中。 – 2009-10-01 12:41:00

相關問題