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

Bagaimana untuk Memuatkan Perhimpunan dan Ketergantungannya secara Rekursif ke dalam AppDomain Berasingan?

Mary-Kate Olsen
Lepaskan: 2025-01-15 12:03:46
asal
303 orang telah melayarinya

How to Recursively Load Assemblies and Their Dependencies into a Separate AppDomain?

Memuatkan Perhimpunan dan Ketergantungan ke dalam AppDomain Berasingan: Pendekatan Rekursif

Memuatkan himpunan dengan kebergantungan yang rumit ke dalam AppDomain baharu boleh memberikan cabaran. Ralat seperti "Tidak dapat memuatkan fail atau pemasangan... atau salah satu kebergantungannya" kerap berlaku kerana perhimpunan yang dirujuk tidak dimuatkan secara automatik. Ini memerlukan proses pemuatan rekursif manual.

Penyelesaian melibatkan langkah-langkah utama ini:

  1. Penciptaan AppDomain: Mula-mula, wujudkan AppDomain baharu:

    1

    2

    3

    <code class="language-csharp"> AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation;

     setup.ApplicationBase = dir;

     AppDomain domain = AppDomain.CreateDomain("SomeAppDomain", null, setup);</code>

    Salin selepas log masuk
  2. Memuatkan Pemasangan Utama: Muatkan pemasangan utama menggunakan AssemblyName:

    nya

    1

    <code class="language-csharp"> domain.Load(AssemblyName.GetAssemblyName(path));</code>

    Salin selepas log masuk
  3. Resolusi Rujukan Rekursif: Lelaran melalui rujukan pemasangan yang dimuatkan dalam AppDomain baharu:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    <code class="language-csharp"> foreach (AssemblyName refAsmName in Assembly.ReflectionOnlyLoadFrom(path).GetReferencedAssemblies())

     {

      // Utilize a proxy object for cross-AppDomain access

      Type type = typeof(Proxy);

      var value = (Proxy)domain.CreateInstanceAndUnwrap(type.Assembly.FullName, type.FullName);

     

      // Load the referenced assembly in the target AppDomain

      value.GetAssembly(refAsmName.FullName);

     }</code>

    Salin selepas log masuk
  4. Kelas Proksi untuk Interaksi Merentas Domain: Kelas Proxy memudahkan komunikasi antara AppDomains:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    <code class="language-csharp"> class Proxy : MarshalByRefObject

     {

      public Assembly GetAssembly(string assemblyPath)

      {

          try

          {

              return Assembly.LoadFile(assemblyPath);

          }

          catch (Exception)

          {

              return null;

          }

      }

     }</code>

    Salin selepas log masuk

Kaedah ini memastikan semua kebergantungan yang diperlukan dimuatkan secara rekursif ke dalam AppDomain sasaran, menghalang ralat masa jalan dan mendayakan pelaksanaan pemasangan yang berjaya.

Atas ialah kandungan terperinci Bagaimana untuk Memuatkan Perhimpunan dan Ketergantungannya 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