c#-在VS扩展中具有[导出]的MEF组件-未找到与约束匹配的导出
作者:互联网
在Visual Studio扩展中,我尝试导出MEF组件并在以后找到它.
我有这个课:
[Export(typeof(IBoilerplateSettings))]
public class BoilerplateSettings : IBoilerplateSettings
{
...
并在OleMenuCommand的回调中解析此代码.从this pull request获得示例.
var componentModel = (IComponentModel)this.package.GetService(typeof(SComponentModel));
var settings = componentModel.DefaultExportProvider.GetExportedValue<IBoilerplateSettings>();
但是每次都会抛出此错误:
No exports were found that match the constraint:
ContractName UnitTestBoilerplate.IBoilerplateSettings
RequiredTypeIdentity UnitTestBoilerplate.IBoilerplateSettings
两者都在同一程序集中.我已经在System.Composition和System.ComponentModel.Composition中都尝试了[Export]属性,但是都没有用.
我正在查看the docs for MEF in VS,但听起来像添加属性就可以了.我也尝试清除ComponentModel缓存,但这没有用.我在这里想念什么?
解决方法:
通常要检查两件事:
>确保您的项目被提及为.vsixmanifest中的MEF组件.如果不是这样,VS将不在您的程序集中查找.
>如果您使用的是Visual Studio 2015或更高版本,则在ComponentModelCache文件夹中有一个.err文件,其中列出了创建MEF合成时的错误.确保您不在意的东西在那里. (在那里乱丢垃圾是正常的……在干净的状态下运送垃圾并不总是最好的.)
而且,如果那行不通,通常会有一种激进的方法,那就是在运行Visual Studio时中断所有异常,看看是否可以找到与扩展相关的任何东西.您可能会发现其他加载异常或其他根本原因.不幸的是,这是一种非常分散的方法.
标签:mef,visual-studio-extensions,c,visual-studio 来源: https://codeday.me/bug/20191111/2022277.html