3
這裏的小班我使用探測可用的插件列表:的AppDomain陰影複製不工作(原組件鎖定)
internal static class PluginDirectoryLoader
{
public static PluginInfo[] ListPlugins(string path)
{
var name = Path.GetFileName(path);
var setup = new AppDomainSetup
{
ApplicationBase = path,
ShadowCopyFiles = "true"
};
var appdomain = AppDomain.CreateDomain("PluginDirectoryLoader." + name, null, setup);
var exts = (IServerExtensionDiscovery)appdomain.CreateInstanceAndUnwrap("ServerX.Common", "ServerX.Common.ServerExtensionDiscovery");
PluginInfo[] plugins = null;
try
{
plugins = exts.ListPlugins(); // <-- BREAK HERE
}
catch
{
// to do
}
finally
{
AppDomain.Unload(appdomain);
}
return plugins ?? new PluginInfo[0];
}
}
的path
參數指向一個子目錄包含插件組件加載。這個想法是使用啓用了影子複製的獨立AppDomain加載它們。
在這種情況下,影子複製是不是真的有必要看到,因爲在AppDomain迅速卸載,但是當我真正的代碼,我打算寫的下一塊加載插件,我想用陰影複製等等該二進制文件可以即時更新。我已經在這個課上啓用了影子複製作爲測試,以確保我做對了。
顯然我做得不對,因爲當我在代碼示例中的註釋行(即plugins = exts.ListPlugins()
)中的調試器中斷時,原始插件程序集被應用程序鎖定!
看到我指定由AppDomain加載的程序集應該被複制,爲什麼它們被應用程序鎖定?
我已經發布我的問題在https://stackoverflow.com/questions/46067782/appdomain-doesnt-make-shadow-files你可以看看,請。 –