Maison >développement back-end >C++ >Comment charger de manière récursive des assemblys et leurs références dans un nouveau domaine d'application ?
Charger récursivement l'assembly et toutes ses références dans un nouvel AppDomain
Afin de charger un assembly dans un nouvel AppDomain et de charger récursivement toutes ses références, suivez ces étapes :
1. Créez une classe proxy dans 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. Créez un domaine d'application et un proxy de domaine :
<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. Charger l'assemblage racine :
<code class="language-csharp">string path = System.IO.Path.Combine(dir, "MyDll.dll"); Assembly assembly = value.GetAssembly(path);</code>
En utilisant la méthode CreateInstanceAndUnwrap
, l'objet proxy sera exécuté dans un nouvel AppDomain et l'assembly et toutes ses dépendances seront chargés de manière récursive. Notez que vous devez utiliser LoadFile
au lieu de LoadFrom
pour éviter les problèmes de résolution de dépendance mentionnés dans la question. Le code amélioré inclut la gestion des exceptions pour mieux gérer les erreurs pouvant survenir lors du chargement d'un assembly.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!