我对MEF有点困惑。
我有一个安装程序和配置应用程序shell,它使用MEF加载各个安装程序组件。这使最终用户能够从已放置到安装发行版中的任何组件中进行选择。
第一个安装组件是为使用此版本11的SQLServer SMO库而编写的。安装针对2008R2或2012年都很好。(让我们称其为组件A)
我有另一个团队将代码迁移到一个新组件,但该代码使用的是SQLServer SMO、RMO和SSIS (DTS)库的版本10。(让我们称其为组件B)
当MEF进入加载组件B时,我将为其中一个LoaderExceptionFailure DLL (Microsoft.SqlServer.Replication)获得一个SQLServer。它实际上给出了一个FileNotFoundException (列出DLL)。DLL存在于组件的目录中。这是正确的版本10。
shell应用程序中已经包含了version 11文件。
有什么方法可以告诉应用程序上下文该做什么吗?有什么方法可以告诉组件加载它所需要的任何特定库吗?
我想假设每个组件都可以指定"Associated.Library、Version=1.0.0.0、publickey=abcdef123456789、culture=none“。
发布于 2013-08-18 13:02:26
CLR (非MEF)找不到程序集的原因是,它既不在GAC中,也不在当前AppDomain设置的位置以探测程序集。
处理此类问题的一种方法是将缺少的程序集添加到GAC中。
另一种方法是将包含缺少程序集的文件夹添加到应用程序的探测路径。如果您不介意在应用程序基文件夹(包含可执行文件的程序集)中部署这些程序集,那么就这样做。否则,可以将其添加到应用程序基文件夹的子文件夹中,并将该文件夹添加到privatePath元素 of app.config中。
您将在文章中找到更多信息:运行时如何定位程序集。
https://stackoverflow.com/questions/18240980
复制相似问题