加载仅使用AssemblyCatalog插件引用的第三方程序集

时间:2013-01-15 15:01:58

标签: c# clr mef .net-assembly

我在Windows Azure应用程序中使用MEF,其中所有程序集插件都存储在blob存储中。在blob存储中不仅存储插件,还存储插件引用的所有程序集。

加载插件的代码如下:

foreach (var pluginBytes in _pluginProvider.GetPlugins())
{
    var pluginAssembly = AppDomain.CurrentDomain.Load(pluginBytes);
    var assemblyCatalog = new AssemblyCatalog(pluginAssembly);
    catalog.Catalogs.Add(assemblyCatalog);
}

不幸的是,当在CompositionContainer上调用ComposeParts方法时,引用第三个部件程序集的插件将导致ReflectionTypeLoadException。

由于云解决方案,我无法使用DirectoryCatalog。 我怎样才能解决这个棘手的问题?

1 个答案:

答案 0 :(得分:1)

如果你在另一个blob中有第三方程序集,那么你可以订阅你的应用程序的域AssemblyResolve事件,并使用arg.Name值从blob中找到第三方程序集。然后以加载插件的方式加载它并返回加载的组件的引用。