2009-09-22 2 views
10

런타임시 컴파일 중일 때 C# 코드가 있습니다 ("script"라고 부름). 그것은 내 기능에 액세스하는 데 사용하는 메인 프로그램의 인터페이스를 사용합니다. 컴파일이 끝나면 CompilerResults.CompiledAssembly이 있는데 그럴 수있는 경우는 CreateInstance(Type)입니다.CodeDom으로 컴파일 된 어셈블리를 언로드하십시오.

일단 스크립트를 사용하여 끝내면 완전히 내리고 싶습니다. Loading DLLs into a separate AppDomain

내가 내 구현과 관련된 몇 가지 질문을했다 : 내가 이해에서 나는 별도의 응용 프로그램 도메인을 만들 경우, 나는 단지이 작업을 수행 할 수 있습니다

  1. 나는 컴파일하고 언로드 할 수있는 여러 스크립트가있는 경우 개별적으로 각 앱 도메인을 별도로 만들어야합니까?
  2. 어떤 앱 도메인 이름을 사용해야합니까? GUID가 좋은 아이디어일까요? 갈등을 피할 수있는 이름이 있습니까?
  3. 어셈블리가 별도의 응용 프로그램 도메인에있는 경우 기본 프로그램의 인터페이스에 액세스하는 데 문제가 있습니까? 컴파일하기 전에 현재 ReferencedAssemblies.Add(typeof(Interface).Assembly.Location)하고 있습니다.
  4. CompilerParameters GenerateInMemory=true을 사용할 수 있습니까? 아니면 어딘가에 저장해야합니까? 순서

답변

2

답변 : 당신이 독립적으로 언로드하려면

  1. 예, 당신은 별도의 응용 프로그램 도메인을해야합니다.
  2. 무엇이든 사용하십시오. 스크립트로 다시 식별 할 수 있다면 디버깅에 도움이 될 수 있지만, 이는 실행중인 스레드에 대해 더 사실입니다.
  3. 도메인 설정의 기본 경로를 자신의 것으로 설정하는 한 오래 걸리지는 않습니다.

    AppDomainSetup.ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;

  4. 아니요. 저장하지 않아도됩니다. 도움이 될 것 같지 않습니다.

+0

나는 이것을 연구하는 데 어려움을 겪어서 좀 더 연구했다. 작동 시키려면 좀 더 작업해야 할 것 같습니다 : http://www.devsource.com/c/a/Using-VS/Dynamic-Plugins-Using-the-codeAppDomaincode-Class-to-Load - 및 - Unload-Code /. 최신 버전에 새로운 기능이없는 한? –

+0

나는 운이 좋은 것 같습니다. .NET 3.5를 사용하고 있기 때문에 Managed Extensibility Framework를 사용할 수 있습니다. 물론, 나는 지금 그것을 배우러 가야한다. :) –

+1

나는 내가 원했던/기대했던 것보다 더 깊이 들어간 것처럼 보입니다. MEF는 별도의 AppDomain을 사용하지 않기 때문에 실제로 어셈블리를 언로드 할 수 없습니다. MAF (System.AddIn)는 사용할 수 있지만 훨씬 더 복잡합니다. MAF와 MEF는 함께 사용할 수 있습니다. 어셈블리를 언로 드할 수 있기를 원하지만 적어도 버전 2를 기다려야합니다. –

관련 문제