一直以為.Net的dll搜索路徑和VC一樣,設麼Path路徑、系統路徑什麼的。但是居然發現不一樣。
可惜不是計算機專業,只好亂找了。
我印象當中,dll的路徑要麼是exe目錄,要麼是GAC,要麼是config文件指定的目錄。可惜config只能提供給exe使用,dll沒有cinfig(可是MSDN上說可以,但是我不知道怎麼弄)。
第一部分(概念)
托管模塊(Managed Module)
托管模塊是一個需要CLR才能執行的標准Windows可移植可執行(portable executable,
簡稱PE)文件。
元數據(Metadata)
簡單的講,元數據就是一個數據表的集合,在這些表中,其中一些用於
描述托管模塊中所定義的內容(比如所定義的類型和它們的成員),另外還有一些
用於描述托管模塊中所引用的內容(比如被引用的類型和它們的成員)。
URL: ms-help://MS.MSDN
QTR.2004APR.1033/cpguide/Html/cpconmetadataovervIEw.htm
程序集清單(Assembly Manifest)
程序集清單是另外一些元數據表的集合。這些表描述了組成程序集的文件,
程序集所有文件中實現的公有導出類型,以及一些程序集相關的資源文件或數據文件。
ms-help://
MS.MSDNQTR.2004APR.1033/cpguide/Html/cpconAssemblyManifest.htm
1.
程序集(Assembly)的概念:
首先:程序集是一個或多個托管模塊,以及一些資源文件的邏輯組合。因為它是一個邏輯上的組合,所以程序集的邏輯表示和物理表示可以相互分離。如何將代碼和資源劃分到不同的文件中完全取決於我們。例如,我們可以將一些很少使用的類型或資源放在一個單獨的Assembly Module中,然後根據需要(比如第一次用到的時候),從web上下載它們。如果沒有用到,它們將不會被下載。這樣既節省磁盤空間,也減少了安裝時間。程序集允許我們將文件的部署分解開來,同時又將所有的文件看作一個單獨的集合。
其次:因為CLR是直接和程序集打交道的,所以程序集也是組件復用,以及實施安全策略和版本策略的最小單元(安全策略,版本信息等都只能是加在程序集上)。
注意:程序集是一個邏輯組合,它可以包含很多個文件。大多數程序集(比如使用Visual Studio.NET創建的那些)一般都是單文件程序集,也就是只有一個.exe或者.dll文件(目前.Net的程序集只有這兩種格式)。在這種情況下,程序集清單(manifest)直接嵌入到單文件程序集中。但是,你也可以用“程序集生成工具”(Al.exe)來創建多文件程序集。也可以只創建一個只包含清單的程序集。
2.
強命名程序集(Strong Name Assembly)的概念
因為不同的公司可能會開發出有相同名字的程序集來,如果這些程序集都被復制到同一 個相同的目錄下,最後一個安裝的程序集將會代替前面的程序集。這就是著名的Windows “DLL Hell”出現的原因。
很明顯,簡單的用文件名來區分程序集是不夠的,
CLR需要支持某種機制來唯一的標識一個程序集。