2017-05-27 62 views
1

基本上我想知道的是,當我在Visual Studio中添加一個引用到任何.dll文件時,這個DLL會被嵌入到可執行文件中嗎?如果不是如何可執行知道去哪裏尋找這些DLL文件:dll文件被引用後是否嵌入到可執行文件中?

Reference to dll files

+0

不。這些是框架程序集。 CLR知道如何在GAC中找到它們,c:\ windows \ microsoft.net \ assembly –

回答

2

組件,無法嵌入。

如果您未引用強命名的程序集,它將被複制到可執行文件所在的文件夾(也可以將程序集放在其他任何位置)。 CLR在包含可執行文件的文件夾中或在您可以爲CLR設置的任何其他文件夾中查找此程序集。

如果您引用任何強名稱的程序集,則CLR將以相同方式查找此程序集因爲它在全局程序集緩存(GAC-MSDN - GAC)中查找不具有強命名的程序集和附加信息。

+0

對強命名程序集的引用也將搜索應用程序的本地文件夾,您不必將其放入GAC因爲它是可用的。 –

+0

@Lasse V.卡爾森,謝謝,編輯 –

0

庫可以通過兩種主要方式鏈接到可執行文件:動態和靜態。

動態表示可執行文件將在可執行文件中聲明對庫的依賴關係中的標記。假設它安裝在系統上,操作系統或運行時環境負責查找該庫。如果你正在使用這樣的庫,你需要知道它們來自哪裏(.NET,Visual Studio,第三方等),這樣你才能確保它們在你的應用程序分發時安裝在系統中。通常,您可以通過將它包含在與可執行文件相同的文件夾中來使用所需的庫版本(對於Windows),但通常不希望對可能已存在的庫執行此操作系統。

靜態意味着庫被編譯到可執行文件中。可執行文件要大得多,並且您可以保證使用您製作程序的庫的版本,但並非所有庫都可以靜態使用。

從字面上看,DLL意味着動態鏈接庫,因此您需要知道您使用的庫來自哪裏,以確保它們存在於您希望應用程序運行的系統上。

相關問題