Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memuatkan Rujukan Perhimpunan secara Rekursif ke dalam AppDomain Berasingan?
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>
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!