C# 如何从metro应用程序加载/导入带有MEF的dll?

C# 如何从metro应用程序加载/导入带有MEF的dll?,c#,mef,microsoft-metro,windows-runtime,.net-4.5,C#,Mef,Microsoft Metro,Windows Runtime,.net 4.5,我正在尝试使用MEF编写一个可扩展的metro应用程序。我让它与本地扩展(在当前程序集内部)一起工作。现在我想加载一个外部dll。目录似乎不在.net 4.5中。因此,我尝试使用ApplicationCatalog,但在调用SatisfyImportsOnce时出现以下错误:Assembly.LoadFrom在AppX中不受支持。 这是我的密码: var catalog = new AssemblyCatalog(GetType().GetTypeInfo().Assembly); Applic

我正在尝试使用MEF编写一个可扩展的metro应用程序。我让它与本地扩展(在当前程序集内部)一起工作。现在我想加载一个外部dll。
目录
似乎不在.net 4.5中。因此,我尝试使用
ApplicationCatalog
,但在调用
SatisfyImportsOnce
时出现以下错误:
Assembly.LoadFrom在AppX中不受支持。

这是我的密码:

var catalog = new AssemblyCatalog(GetType().GetTypeInfo().Assembly);
ApplicationCatalog catApp = new ApplicationCatalog();
AggregateCatalog cat = new AggregateCatalog(catalog, catApp);
_compositionService = cat.CreateCompositionService();
_compositionService.SatisfyImportsOnce(this);
有什么建议吗?出了什么问题


我已将dll放在Appx目录中,并以管理员身份运行VS11测试版。

您的外部库超出了Metro允许的沙箱范围。Metro环境中的.NET framework是有限的,类似于WP7或Micro framework。有很多东西被剪掉了。如果您的外部DLL不是使用这些受约束的库构建的,那么编译器将不允许使用它。

我在MEF论坛上与一些支持者交谈,他确认ApplicationCatalog不能在metro应用程序之外使用。因此,这个问题无法解决,但可以解决。

我将dll的项目创建为Windows Metro样式的类库。哦,对不起,我错过了。您是否将输出设置为WinMD文件?不,我没有,因为WinMD文件只允许实现WinRT接口。但是我的类实现了核心项目的IExtension接口(参见链接文章的最后一句)。我想我需要这个接口来进行导入/导出,或者我错过了其他方式吗?是的,但这回到了我最初的答案——你不能走出MetroUI的沙箱。他们用WinMD格式强制执行。要在MetroUI中使用库,它必须是WinMD。要成为WinMD,您只需实现允许的接口。这就是MetroUI应用程序的流行趋势。你不能使用大量的外部代码,即使它是良性的。我在本周早些时候的另一个回答中遇到了一些文件缓存问题-可能尝试进行清理和生成,或者手动删除临时文件。