독립형 AppDomain에서 어셈블리와 해당 참조를 재귀적으로 로드
새 AppDomain에 어셈블리를 로드할 때 모든 참조를 재귀적으로 로드하여 FileNotFoundException
오류를 방지하세요. 이 문서에서는 이 복잡한 작업을 수행하는 단계를 살펴봅니다.
먼저 사용자 정의 ApplicationBase
를 사용하여 독립형 AppDomain을 만듭니다. 그런 다음 AssemblyName.GetAssemblyName
을 사용하여 루트 어셈블리를 로드합니다. 그러나 이것만으로는 충분하지 않으며 어셈블리 참조를 수동으로 로드해야 합니다.
이렇게 하려면 ReflectionOnlyLoadFrom
을 사용하여 실제로 로드하지 않고 참조 어셈블리 목록을 가져옵니다. 각 참조에 대해 domain.Load(refAsmName)
을 사용하여 AppDomain에 로드하세요.
단, 여기서 주의할 점이 있습니다. 외부 애플리케이션 도메인에서 프록시 객체를 실행하려면 CreateInstanceAndUnwrap
을 호출해야 합니다. 이 메서드를 사용하면 개체가 대상 AppDomain에서 실행됩니다.
이 프로세스를 보여주는 코드 예:
<code class="language-csharp">class Program { static void Main(string[] args) { AppDomainSetup domaininfo = new AppDomainSetup(); domaininfo.ApplicationBase = System.Environment.CurrentDirectory; Evidence adevidence = AppDomain.CurrentDomain.Evidence; AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo); Type type = typeof(Proxy); var value = (Proxy)domain.CreateInstanceAndUnwrap( type.Assembly.FullName, type.FullName); var assembly = value.GetAssembly(args[0]); // AppDomain.Unload(domain); } } public class Proxy : MarshalByRefObject { public Assembly GetAssembly(string assemblyPath) { try { return Assembly.LoadFile(assemblyPath); } catch (Exception) { return null; // throw new InvalidOperationException(ex); } } }</code>
LoadFile
대신 LoadFrom
을 사용할 때는 FileNotFound
예외를 피하기 위해 종속성을 직접 로드해야 한다는 점을 기억하세요.
위 내용은 어셈블리 참조를 별도의 AppDomain에 재귀적으로 로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!