我有一個mvc3應用程序。 我在我的應用程序項目中有一個名爲「插件」的子文件夾無法在新的應用程序域中加載程序集
存儲在該文件夾中的所有dll應該在運行時更新,所以我們放下appdomain並重新加載新版本的dll,試圖加載所有的插件DLL在不同的AppDomain中,並設置它的shadowCopy屬性。
通過SO,msdn和一些博客,我得到了這個「解決方案」。 (這在我的Application_Start期間被調用)
static AppDomain pluginDomain;
static PluginHolder()
{
AppDomainSetup domainSetup = AppDomain.CurrentDomain.SetupInformation;
domainSetup.ApplicationName = "Plugins";
domainSetup.PrivateBinPathProbe = domainSetup.PrivateBinPath;
domainSetup.PrivateBinPath = GetPluginsDirectory();
domainSetup.ShadowCopyFiles = "true";
domainSetup.ShadowCopyDirectories = domainSetup.PrivateBinPath;
pluginDomain= AppDomain.CreateDomain("Plugins", null, domainSetup);
var item = pluginDomain.Load(File.ReadAllBytes(GetPluginsDirectory() + "Item.dll"));
}
「Item.dll」是我正在嘗試加載的dll。最後一行引發「無法加載文件或程序集項目或其某個依賴項」。 這似乎是其他人成功的方式,但它不會爲我工作。
我以前沒有AppDomain的經驗,所以我不確定如何解決這個問題,或者如果我正確處理它。
我的程序集是通過新的AppDomain加載的嗎?