2011-06-28 31 views
7

我有一個簡單的疑問:我有一個我想引用的外部程序集。我有一個Asp.Net應用程序。我想在我的Asp.Net應用程序中使用該程序集。瞭解Web.config文件中的ASP.NET程序集引用管理

我添加了一個引用,VS所做的就是將我的dll放在我的網站的Bin子目錄中。

我以爲VS會修改我的web.config文件添加外部引用... 所以只有在GAC引用程序集時纔會發生? (這是有道理的,因爲需要公共令牌和版本)。

三江源

回答

6

當CLR加載您執行組裝,它會檢查程序集的清單,以確定需要哪些依賴它來運行。它通過一系列的步驟來做到這一點:

  1. 檢查重定向 - 如果組件強名稱,CLR將首先檢查相應的配置(app.configweb.config等),看如果有指定的綁定重定向。綁定重定向允許CLR說,我應該加載v1.0.0.0,而不是加載v2.0.0.0。如果未找到強名稱程序集的綁定重定向,它將檢查GAC中的策略文件,如果找不到策略文件,則會檢查machine.config。如果未指定綁定重定向,則CLR將使用調用程序集清單中指定的程序集名稱加載程序集。看到

  2. 檢查裝配已經加載 - CLR的確定組裝之前已經加載,如果有,它會使用相同的加載的程序集,否則繼續...

  3. 從GAC加載程序集 - 如果程序集先前未加載且名稱很強,CLR將嘗試從全局程序集緩存中加載程序集。

  4. CodeBase - 如果CLR仍然找不到裝配體,它將使用codeBase路徑嘗試找到裝配體。

  5. 探測 - 如果CLR仍然找不到組件,它將檢查組件的探測路徑。默認探測路徑是當前正在裝入組件的AppDomain的應用程序基路徑。

(這都是從一篇名爲Understanding .Net Assemblies and References的大文章改編而來)。

對於您的Web應用程序,CLR仍然執行上述所有操作,但AppDomain應用程序基本路徑是您的IIS應用程序中的/bin文件夾。

+0

鏈接已關閉,但如果有人發現文章的副本,我會感興趣。 – GuiSim