設置AssemblyName.CodeBase是否強制將程序集加載到LoadFrom上下文中?設置AssemblyName.CodeBase是否強制將程序集加載到LoadFrom上下文中?
我正在研究一種插件系統。我需要能夠使用Type.GetType等...在我的代碼中的任何地方,我不應該知道該類型是否來自一個插件的DLL或不。
我的插件位於我的應用程序的bin目錄(windows/web)下的一個文件夾中,每個插件位於它自己的文件夾中。
我將探測路徑設置爲Plugins(或bin; bin \ Plugins for web),即使它們在子文件夾中沒有任何區別。
我載入我的插件這樣
pluginInfo.EntryAssemblyName = new AssemblyName(myAssemblyName);
pluginInfo.EntryAssemblyName.CodeBase = assemblyPath;
pluginInfo.EntryAssembly = Assembly.Load(pluginInfo.EntryAssemblyName);
注:PluginInfo僅僅是讓我的插件的狀態的類。
我想知道,因爲我設置了程序集名稱的CodeBase屬性Assembly.Load能夠找到我的程序集,即使它不在探測路徑中,是否意味着程序集會在默認上下文中加載或加載從上下文?
AssemblyResolve事件在進入程序集之後再次引發是否正常?
我的問題是,如果我沒有設置CodeBase屬性,它找不到Assembly,因爲它位於Plugins文件夾的子文件夾中,並且此文件夾不在探測路徑中。是否可以在運行時設置探測路徑? –
@Yann您可以在應用程序的配置文件中使用探測元素。 http://msdn.microsoft.com/en-us/library/823z9h8w.aspx –
問題是,我不知道運行時間之前的文件夾,除非我的插件編輯我不太喜歡的配置文件。 –