在新的 AppDomain 中递归加载程序集及其所有引用
为了将程序集加载到新的 AppDomain 中并递归加载其所有引用,请按照以下步骤操作:
1. 在 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. 创建 AppDomain 和域代理:
<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. 加载根程序集:
<code class="language-csharp">string path = System.IO.Path.Combine(dir, "MyDll.dll"); Assembly assembly = value.GetAssembly(path);</code>
通过使用 CreateInstanceAndUnwrap
方法,代理对象将在新的 AppDomain 中执行,并且程序集及其所有依赖项将被递归加载。 请注意,您需要使用 LoadFile
而不是 LoadFrom
来避免问题中提到的依赖项解析问题。 改进后的代码包含了异常处理,以便更好地处理加载程序集过程中可能出现的错误。
以上是如何在新的 AppDomain 中递归加载程序集及其引用?的详细内容。更多信息请关注PHP中文网其他相关文章!