새 AppDomain에 어셈블리와 해당 참조를 모두 재귀적으로 로드합니다.
어셈블리를 새 AppDomain에 로드하고 해당 참조를 모두 재귀적으로 로드하려면 다음 단계를 따르세요.
1. AppDomain에서 프록시 클래스를 만듭니다.
<code class="language-csharp">public class Proxy : MarshalByRefObject { public Assembly GetAssembly(string assemblyPath) { try { return Assembly.LoadFile(assemblyPath); } catch (Exception ex) { // 记录异常信息以便调试 Console.WriteLine($"加载程序集失败: {ex.Message}"); return null; } } }</code>
2. AppDomain 및 도메인 프록시 생성:
<code class="language-csharp">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); Proxy value = (Proxy)domain.CreateInstanceAndUnwrap( type.Assembly.FullName, type.FullName);</code>
3. 루트 어셈블리 로드:
<code class="language-csharp">string path = System.IO.Path.Combine(dir, "MyDll.dll"); Assembly assembly = value.GetAssembly(path);</code>
CreateInstanceAndUnwrap
메서드를 사용하면 프록시 개체가 새 AppDomain에서 실행되고 어셈블리와 해당 종속 항목이 모두 재귀적으로 로드됩니다. 질문에 언급된 종속성 해결 문제를 피하려면 LoadFile
대신 LoadFrom
을 사용해야 합니다. 향상된 코드에는 어셈블리를 로드하는 동안 발생할 수 있는 오류를 더 잘 처리하기 위한 예외 처리가 포함되어 있습니다.
위 내용은 새 AppDomain에서 어셈블리와 해당 참조를 재귀적으로 로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!