2016-05-13 57 views
0

我目前正在寻找一种方法来加载我的棱镜模块缺少第三方DLL(telerik)时,这是一个需要到我的外壳。棱镜加载第三个DLL时,模块启动

我已经创建了一个自定义ModuleCatalog

我CustomModuleCatolog一个boostrapper负责找我的模块的DLL标记为IModule的ANS它们引用到托管目录。

这工作正常。

唯一的问题是,当我的moduleA启动它将需要Telerik.Windows.Controls.gridview。 这个DLL没有被引用到shell项目中。 我不想将不需要的DLL引用到shell项目中。

所以我得到一个错误,因为这个DLL没有加载。

我的问题是:

有需要时由模块(只缺少一个)来加载所有的DLL第三优雅的方式?

我是否应该直接从我的CustomModuleCatalogue, 加载此依赖项,还是应该在调用IModule.Initialize时加载这个依赖项? 还有另一种方法可以做到吗?

Thx提前。

+0

你能给我们提供关于错误信息的更多信息吗? – toumir

回答

1

我通过将模块的输出文件夹设置为与shell相同来处理这个问题。如果我的某个模块引用了某些东西,它会被复制到输出中,并且模块会在运行时找到它。

如果您有单独的模块文件夹,则必须在shell中处理AppDomain.AssemblyResolve事件(例如,请参阅Resolve assembly references from another folder)。

+0

我真的想保留我的模块在文件夹名称Module/ModuleName1,Module/ModuleName2 etc ... 所以你推荐的是从我的shell项目中观看AppDomain.CurrentDomain.AssemblyResolve? 我会试一试:) – pix

+0

我在看这样的事情,但我不觉得这是一种最有效的方式来做到这一点。 :/ – pix