AppDomain:递归程序集加载和依赖关系管理
将程序集及其依赖项加载到新的 AppDomain 中可能很棘手。 对于初学者来说,常见的 FileNotFoundException
通常是由于缺少依赖项而产生的。
理解问题
要记住的一个关键点是,当您将程序集加载到 AppDomain 中时,它引用的程序集不会自动加载。 这需要递归加载以确保所有依赖项都可用。 如果不这样做会导致错误,例如:
“无法加载文件或程序集“MyDll,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。系统找不到指定的文件。”
这个错误清楚地表明需要递归依赖加载。
手动解决依赖关系
一种常见的尝试涉及迭代根程序集的引用并单独加载它们。但是,这通常会导致引用的程序集自身的依赖项出现重复的 FileNotFoundException
错误。
关键步骤:CreateInstanceAndUnwrap
解决方案在于在目标 AppDomain 中执行代理对象之前使用 CreateInstanceAndUnwrap
。这可确保代理在其指定的 AppDomain 内正确运行。
LoadFile
与 LoadFrom
使用 LoadFrom
可能会导致问题,因为它会搜索 GAC 或应用程序的 bin 文件夹。 为了避免这种情况,请使用LoadFile
。 请记住,您仍然负责自己递归加载依赖项。
总结
成功地将程序集及其依赖项加载到 AppDomain 中需要仔细的递归依赖项加载。 使用 CreateInstanceAndUnwrap
并选择 LoadFile
而不是 LoadFrom
将帮助您有效管理引用的程序集。
以上是如何将程序集及其依赖项递归加载到 AppDomain 中?的详细内容。更多信息请关注PHP中文网其他相关文章!