비즈니스 로직이 런타임에로드되는 dll에 배치되도록 백엔드를 구성했습니다. ShadowCopyFiles = true 및 파일 시스템 모니터링을 사용하여 호스트 프로세스를 다시 시작하지 않고 비즈니스 논리를 수정할 수 있습니다.AppDomain 격리 문제
불행하게도
지금까지 그렇게
이의 호스트 응용 프로그램 도메인 A를 부르 자 ... 좋은, 그리고 아이들 중 하나 B. 나는 B에 의해 참조되는 어셈블리 C에서 변경하는 경우 만 A가 아니라면 B가 다시로드 될 때 이러한 변경 사항이 반영되지 않습니다. 나는 A가 C 자체를로드하기 때문이라고 가정합니다. A가 C를로드하지 못하게하려면 어떤 단계를 밟아야합니까?이것은 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를 명시 적으로 참조하지 않지만 A는 C를 참조하는 B를 참조합니다. –
A를 빌드하면 직접 참조되지 않는다는 사실에도 불구하고 C의 로컬 복사본이 생성되는 것을 볼 수 있습니다. 그래서 어셈블리의 재귀 검색이 있습니다. –
참조는 암시 적으로 재귀 적입니다. A가 B를 참조하고 B가 C를 참조하면 A를로드하면 C가로드됩니다. –