我以这样一种方式构建了一个后端,将业务逻辑放置在运行时加载的 dll 中。使用 ShadowCopyFiles = true 和文件系统监控,我能够在不重新启动主机进程的情况下修改业务逻辑。
到现在为止还挺好...
让我们称主机 appdomain A,和其中一个孩子 B。
不幸的是,如果我在由 B 而不是 A 引用的程序集 C 中进行更改,则重新加载 B 时不会反映这些更改。我认为这是因为 A 加载 C 本身。我必须采取哪些步骤来防止 A 加载 C?
这是 A 用来加载 B 的代码:
AppDomainSetup appDomainSetup = new AppDomainSetup();
appDomainSetup.CachePath = ServiceDLLPath + @"\Shadow";
appDomainSetup.ShadowCopyFiles = "true";
ad = AppDomain.CreateDomain(assemblyName, null, appDomainSetup);
ad.InitializeLifetimeService();
try
{
service = (IService)ad.CreateInstanceFromAndUnwrap(assemblyName,
"AppName.Services." + typeName);
service.Start();
}
catch (Exception e)
{
LogManager.Log("AppDomain load failed: " + e.Message);
return false;
}