C#找不到已加载的程序集

Vas*_*sya 5 .net c#

我正在编写一个使用插件的应用程序.插件是位于插件目录中的类库.我的应用程序通过LoadFrom加载这些库.其中一些具有库的形式的依赖关系,它们位于相同的插件目录中.当我尝试通过Activator.CreateInstance从其中一个插件创建类的实例时,我收到一个异常'无法找到程序集'(这是插件的依赖程序集),但是这个程序集已经加载(!)和插件,它是在ProcessExplorer中可见.我无法理解我的麻烦.

obe*_*eak 6

您的问题可能是,de加载的程序集与请求程序集的版本不同..Net运行时将它们的名称和它们的版本之后的程序集映射到名称等于和版本差异,如果加载另一个,则会得到异常,即"无法找到程序集"或类似的东西.问题是,组件无法正确匹配.但是有一个解决方案:
查看MSDN以获取有关该问题的更多信息.

该问题的解决方案:

  1. 如果必须加载组件的2个版本试图通过实施帮助运行时AssemblyResolve事件的样品也是在这里.
  2. 尝试使用AssemblyBindLogViewer来确定插件的依赖关系并交叉检查您的问题.

如果您处理插件,我建议无论如何都要实现该事件,因此您可以记录该AppDomain的所有程序集请求.

你会在这里找到关于运行时行为和装配加载的更多信息

希望我能提供帮助,请给我们关于你的解决方案的反馈!

配置插件文件夹

  1. 将插件加载到一个单独的AppDomain,其中插件文件夹为ApplicationBase.
    要配置AppDomains,请参阅.这是加载插件的recomendet解决方案,因为您可以定义AppDomain 的安全级别(沙盒)
  2. 扩展当前的AppDomains PrivatePath,因此它还会搜索此路径中的程序集.这个方法已经过时了!(但这是它的工作)


Mic*_* B. 0

我遇到了类似的问题,通常通过更改项目属性中的目标框架来解决......