我有一個簡單的疑問:我有一個我想引用的外部程序集。我有一個Asp.Net應用程序。我想在我的Asp.Net應用程序中使用該程序集。瞭解Web.config文件中的ASP.NET程序集引用管理
我添加了一個引用,VS所做的就是將我的dll放在我的網站的Bin子目錄中。
我以爲VS會修改我的web.config文件添加外部引用... 所以只有在GAC引用程序集時纔會發生? (這是有道理的,因爲需要公共令牌和版本)。
三江源
我有一個簡單的疑問:我有一個我想引用的外部程序集。我有一個Asp.Net應用程序。我想在我的Asp.Net應用程序中使用該程序集。瞭解Web.config文件中的ASP.NET程序集引用管理
我添加了一個引用,VS所做的就是將我的dll放在我的網站的Bin子目錄中。
我以爲VS會修改我的web.config文件添加外部引用... 所以只有在GAC引用程序集時纔會發生? (這是有道理的,因爲需要公共令牌和版本)。
三江源
當CLR加載您執行組裝,它會檢查程序集的清單,以確定需要哪些依賴它來運行。它通過一系列的步驟來做到這一點:
檢查重定向 - 如果組件強名稱,CLR將首先檢查相應的配置(app.config
,web.config
等),看如果有指定的綁定重定向。綁定重定向允許CLR說,我應該加載v1.0.0.0,而不是加載v2.0.0.0。如果未找到強名稱程序集的綁定重定向,它將檢查GAC中的策略文件,如果找不到策略文件,則會檢查machine.config
。如果未指定綁定重定向,則CLR將使用調用程序集清單中指定的程序集名稱加載程序集。看到
檢查裝配已經加載 - CLR的確定組裝之前已經加載,如果有,它會使用相同的加載的程序集,否則繼續...
從GAC加載程序集 - 如果程序集先前未加載且名稱很強,CLR將嘗試從全局程序集緩存中加載程序集。
CodeBase - 如果CLR仍然找不到裝配體,它將使用codeBase
路徑嘗試找到裝配體。
探測 - 如果CLR仍然找不到組件,它將檢查組件的探測路徑。默認探測路徑是當前正在裝入組件的AppDomain
的應用程序基路徑。
(這都是從一篇名爲Understanding .Net Assemblies and References的大文章改編而來)。
對於您的Web應用程序,CLR仍然執行上述所有操作,但AppDomain
應用程序基本路徑是您的IIS應用程序中的/bin
文件夾。
鏈接已關閉,但如果有人發現文章的副本,我會感興趣。 – GuiSim