编程语言
首页 > 编程语言> > c#-在VS扩展中具有[导出]的MEF组件-未找到与约束匹配的导出

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