Memuatkan perhimpunan dengan rujukan rekursif dalam AppDomain
Apabila memuatkan perhimpunan ke dalam domain aplikasi yang berasingan (AppDomain), anda juga perlu memuatkan rujukannya secara manual. Jika tidak, ralat FileNotFoundException mungkin disebabkan oleh kebergantungan yang hilang.
Untuk memuatkan perhimpunan dan semua rujukannya secara rekursif, disyorkan:
<code class="language-C#">// 在当前 AppDomain 中创建一个代理类。 class Proxy : MarshalByRefObject { public Assembly GetAssembly(string assemblyPath) => Assembly.LoadFile(assemblyPath); } // 创建一个新的 AppDomain。 AppDomain domain = AppDomain.CreateDomain("MyDomain", null, domaininfo); // 在新的 AppDomain 中创建一个代理实例。 var value = (Proxy)domain.CreateInstanceAndUnwrap( typeof(Proxy).Assembly.FullName, typeof(Proxy).FullName); // 使用代理将程序集加载到新的 AppDomain 中。 var assembly = value.GetAssembly(assemblyPath); // 迭代程序集的引用并递归加载它们。 foreach (AssemblyName refAsmName in assembly.GetReferencedAssemblies()) { LoadAssemblyWithReferences(refAsmName, domain); }</code>
Gunakan LoadFrom() dan LoadFile() untuk memuatkan pemasangan
Memuatkan pemasangan menggunakan LoadFrom() akan cuba mencari pemasangan dalam GAC atau folder bin AppDomain semasa. Operasi ini mungkin gagal jika pemasangan tidak berada di salah satu lokasi ini.
Sebaliknya, LoadFile() memuatkan perhimpunan daripada laluan fail tertentu. Kaedah ini memerlukan anda memuatkan semua kebergantungan secara manual. Walau bagaimanapun, ia memberikan kawalan yang lebih besar ke atas proses pemuatan pemasangan.
Mengikuti langkah di atas, pemasangan dan semua rujukannya boleh dimuatkan secara rekursif ke dalam AppDomain yang berasingan, membolehkan persekitaran pelaksanaan yang lebih terpencil dan terkawal.
Atas ialah kandungan terperinci Bagaimana untuk Memuatkan Perhimpunan dan Rujukannya secara Rekursif ke dalam AppDomain Berasingan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!