다음 작업을 수행하려고합니다. 앱 A는 '마더 앱'입니다. 그것은 열려 있습니다. App B는 App.D에서 지정된 인터페이스에서 파생 된 일부 클래스를 작성하는 .DLL입니다.AppDomain에서 .DLL을 언로드 할 때 도움이 필요합니다. - 여전히 ShadowCopy로도 작동하지 않습니다.
그런 다음 App A에서 App B의 클래스를 "가져 와서"메소드를 실행합니다. 동적으로 App B (코드 변경 및 재 컴파일)를 변경하고 App A에서 새 코드를 사용할 수 있기를 원합니다.
새로운 .DLL을 App A 디렉토리에 복사하는 Post-compile 명령이 App B에 있습니다. . App A는 새 AppDomain을 만들고 ShadowCopying을 사용합니다. 이 충분할 것이라고 생각했지만 & 응용 프로그램 B 새 .DLL 복사 할 때 해당 파일을 사용하고 덮어 쓸 수 없습니다 말한다.
애플리케이션 A (코드 TESTSERVER) :
namespace TestServer
{
public interface IRunnable
{
void Run();
}
class Program
{
static void Main(string[] args)
{
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationName = "DemoApp";
setup.ApplicationBase = Environment.CurrentDirectory;
setup.ShadowCopyDirectories = Environment.CurrentDirectory;
setup.ShadowCopyFiles = "true";
int _domain = 1;
while (true)
{
string typeName = Console.ReadLine();
AppDomain appDomain = AppDomain.CreateDomain("DemoDomain" + _domain, null, setup);
IRunnable runner = appDomain.CreateInstanceFromAndUnwrap("TestClient.dll", typeName) as IRunnable;
runner.Run();
AppDomain.Unload(appDomain);
_domain++;
}
}
}
}
애플리케이션 B (코드 TestClient을)
namespace TestClient
{
public class TestRunner : TestServer.IRunnable
{
public void Run()
{
Console.WriteLine("RUNNING");
}
}
public class Bob : TestServer.IRunnable
{
public void Run()
{
Console.WriteLine("BOB");
}
}
}
여기
제가 현재로서는있는 코드
다른 앱 도메인의 항목을 사용하는 경우 해당 앱 도메인이 .DLL 또는 somethi를 자동으로로드 할 수 있음을 읽었습니다. 그 선을 따라. 이 경우 인터페이스를 사용하면 기본 AppDomain이 .DLL을로드하여 잠금으로 설정되어 있습니다.
어떻게이 문제를 해결할 수 있습니까?/더 나은 설정이 있습니까 ??
참고 : 코드를 업데이트 했는데도 여전히 동일한 결과가 나타납니다.
유용한 정보 : http://social.msdn.microsoft.ok/ko/ko/clr/thread/4d4dedc3-dc1c-411e-9c4c-29208942e834 –
그래, 해킹하고 그냥이 문제를 해결하기로 결정했습니다. 이 솔루션은 우아하고 가깝지만 작동합니다. 기본적으로 새 이름을 입력 할 때마다 dll을 다른 이름으로 복사하고로드 한 다음 사용합니다. 결국, 나는 그것들을 시도하고 삭제한다 (그들이 갇혀 있지 않다면). 더 나은 프로그래머가 될 때까지 내 문제를 해결하십시오. – philmo