>백엔드 개발 >C++ >새 AppDomain에서 어셈블리와 해당 참조를 재귀적으로 로드하는 방법은 무엇입니까?

새 AppDomain에서 어셈블리와 해당 참조를 재귀적으로 로드하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-15 12:07:44583검색

How to Recursively Load Assemblies and Their References in a New AppDomain?

새 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.