我已經構建了一個後端,以便業務邏輯放置在運行時加載的dll中。使用ShadowCopyFiles = true和文件系統監視,我可以在不重新啓動主機進程的情況下修改業務邏輯。AppDomain隔離問題
到目前爲止好...
我們稱之爲主機應用程序域A,和孩子們的一個B.
不幸的是,如果我做這被B引用在裝配C,變化,但不是A,當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;
}
感謝您的迴應Chris。 A沒有明確提到C.但是引用B,引用了C,那應該是好的,不是? –
當我構建A時,我可以看到它創建了C的本地副本,儘管它並沒有直接引用,所以我猜想存在某種程序集的遞歸搜索。 –
引用是隱式遞歸的,是的。如果'A'引用'B','B'引用'C',則加載'A'將加載'C'。 –