Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Memuatkan Rujukan Perhimpunan secara Rekursif ke dalam AppDomain Berasingan?

Bagaimana untuk Memuatkan Rujukan Perhimpunan secara Rekursif ke dalam AppDomain Berasingan?

Barbara Streisand
Lepaskan: 2025-01-15 11:51:45
asal
823 orang telah melayarinya

How to Recursively Load Assembly References into a Separate AppDomain?

Muatkan pemasangan dan rujukannya secara rekursif dalam AppDomain kendiri

Apabila memuatkan pemasangan ke dalam AppDomain baharu, pastikan anda memuatkan semua rujukannya secara rekursif untuk mengelakkan ralat FileNotFoundException. Artikel ini meneroka langkah-langkah untuk menyelesaikan tugas yang kompleks ini.

Pertama sekali, buat AppDomain kendiri dengan tersuai ApplicationBase. Kemudian, gunakan AssemblyName.GetAssemblyName untuk memuatkan himpunan akar. Walau bagaimanapun, ini sahaja tidak mencukupi; anda perlu memuatkan rujukan pemasangan secara manual.

Untuk melakukan ini, gunakan ReflectionOnlyLoadFrom untuk mendapatkan senarai perhimpunan yang dirujuk tanpa benar-benar memuatkannya. Untuk setiap rujukan, gunakan domain.Load(refAsmName) untuk memuatkannya ke dalam AppDomain.

Walau bagaimanapun, terdapat kaveat di sini. Untuk melaksanakan objek proksi dalam domain aplikasi luaran, anda perlu memanggil CreateInstanceAndUnwrap. Kaedah ini memastikan bahawa objek dilaksanakan dalam AppDomain sasaran.

Contoh kod yang menggambarkan proses ini:

<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>
Salin selepas log masuk

Ingat bahawa apabila menggunakan LoadFile dan bukannya LoadFrom anda mesti memuatkan sendiri mana-mana kebergantungan untuk mengelakkan FileNotFound pengecualian.

Atas ialah kandungan terperinci Bagaimana untuk Memuatkan Rujukan Perhimpunan secara Rekursif ke dalam AppDomain Berasingan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan