我可以用一種方式(Visual Studio中的設置)來配置.NET應用程序:它引用「本地」程序集(而不是在GAC)而不是GAC中的程序集,儘管兩個程序集具有相同的名稱和相同的版本?如何防止.NET應用程序從GAC加載/引用程序集?
回答
如果兩個程序集都是強命名的(簽名),CLR將始終從GAC加載。
下面是運行時用來解析程序集引用(從How the Runtime Locates Assemblies)步驟:
通過檢查適用 配置文件,包括 應用程序配置文件, 發行商確定正確的程序集版本策略文件和機器 配置文件。如果 配置文件位於 遠程計算機上,則運行時必須首先定位並下載應用程序 配置文件 。
檢查程序集名稱是否已被綁定到之前,如果是, 使用先前加載的程序集。 如果先前加載 組件的請求失敗,請求將立即失敗 而不會嘗試加載 程序集。
檢查全局程序集緩存。如果在那裏找到程序集,則 運行時使用此程序集。
探頭的組件(...一些材料省略......)
正如在同一篇文章後說:
沒有版本檢測組件沒有強名稱,運行時 也沒有在全局程序集緩存中檢入沒有強名稱的程序集。
因此,如果您有能力從本地程序集中刪除簽名,那麼應用程序將使用它而不是GAC中的簽名。
有關運行時綁定機制的更多細節,請參閱Suzanne Cook's blog。
This blog entry from Scott Hanselman也提供了一個很好的綁定過程的概述。
您是否看到此問題?
Forcing the ASP.NET Application to load the assembly from bin not from GAC
這聽起來像你正在嘗試做同樣的事情。
要成功部署您的.NET Framework應用程序,您必須瞭解公共語言運行庫如何定位並綁定到組成應用程序的程序集。默認情況下,運行時嘗試與構建應用程序的程序集的確切版本綁定。該默認行爲可以被配置文件設置覆蓋。
您可以使用Windows軟件開發工具包(SDK)中包含的程序集綁定日誌查看器(Fuslogvw.exe)查看日誌文件中的綁定信息。
小號
如果你可以改變本地的dll的版本號,您可以使用使用oldVersion屬性的DLL版本重定向。您可以爲當地組裝使用強名稱: 請看看這個頁面: http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx
你也應該考慮,這是可以修改編譯的程序集的版本號喜歡在這裏描述: Change Assembly Version in a compiled .NET assembly
- 1. 如何從GAC中引用程序集?
- 2. 我如何從GAC加載程序集?
- 3. C#:如何從GAC加載程序集?
- 4. 部署的.NET程序如何在GAC中引用程序集?
- 5. 如何在GAC中引用程序集
- 6. 如何引用GAC中的程序集?
- 7. 如何引用GAC中的程序集
- 8. WCF服務無法從GAC中加載引用程序集
- 9. 如何重新加載.NET應用程序域的程序集?
- 10. 從VS2010引用GAC中的.Net 4.0程序集
- 11. 如何從動態生成的程序集中引用GAC程序集?
- 12. 防止從GAC加載dll
- 13. 從64位應用程序引用.net 1.1程序集
- 14. 如何強制應用程序從另一個程序集加載.NET類?
- 15. 防止在c中加載程序集#
- 16. 無法從GAC加載程序集,但它從程序文件夾加載
- 17. 在.net 4.0應用程序中引用.net 2.0程序集
- 18. 如何從純C應用程序重用.Net程序集
- 19. ReflectionTypeLoadException從.Net 4.0應用程序加載.Net 4.0程序集,而2.0作品
- 20. 如何將.net程序集添加到全局程序集緩存(GAC)
- 21. GAC - 程序集在GAC中,但「無法加載文件或程序集」
- 22. 從Windows應用商店應用程序加載程序集
- 23. .net 1.1應用程序如何使用.net 2.0程序集
- 24. 如何在另一個引用程序集中加載引用程序集?
- 25. 從gac載入dll阻止應用程序
- 26. 如何從GAC中加載特定版本程序集在ASP Net VNext中
- 27. 如何防止程序加載兩次?
- 28. 如何使用GAC中的程序集?
- 29. 如何從EdgeJS應用程序引用Roslyn程序集?
- 30. 如何防止mod_wsgi django應用程序反覆重新加載?
哦,我沒有找到這個答案,當我搜索StackOverFlow這個主題。但是你是對的,最後問題幾乎是一樣的。 – Flo 2009-10-22 14:17:28