如何将类从外部程序集导入到Visual Studio文本编辑器扩展中?

时间:2019-04-15 16:50:02

标签: c# wpf mef vsix

我正在尝试为Visual Studio 2017开发文本编辑器扩展,并且在将外部程序集中定义的类实例导入IWpfTextEditorCreationListener的构造函数时遇到麻烦。如果我尝试将外部程序集中定义的类导入构造函数,则不会触发IWpfTextEditorCreationListener。

该扩展程序实现IWpfTextEditorCreationListener接口,如以下代码所示:

    [ContentType("code")]
    [Export(typeof(IWpfTextViewCreationListener))]
    [TextViewRole(PredefinedTextViewRoles.Editable)]
    public class MyTextViewCreationListener : IWpfTextViewCreationListener
    {
        private ExternalClassLibrary.ExternalClass clazz;

        [ImportingConstructor]
        public MyTextViewCreationListener(ExternalClassLibrary.ExternalClass clazz)
        {
             this.clazz = clazz;
        }

        public void TextViewCreated(IWpfTextView textView)
        {
            clazz.foo();
        }
    }

ExternalClass在另一个程序集中实现,如下所示:

namespace ExternalClassLibrary
{
    [Export]
    public class ExternalClass
    {
        public void foo()
        {
        }
    }
}

如果MyTextViewCreationListener的构造函数被注释掉,则调用TextViewCreated(),但未注释掉它,而不调用TextViewCreated()。 是否可以将外部程序集导入到IWpfTextViewCreationListener?

1 个答案:

答案 0 :(得分:0)

我找到了解决方法。

  1. 在VSIX项目中打开源extension.vsixmanifest文件。
  2. 在“资产”选项卡上,将外部程序集添加为MefComponent。
    1. 点击“新建”按钮
    2. 在“类型”列表中,选择Microsoft.VisualStudio.MefComponent。
    3. 在“源”列表中,选择当前解决方案中的A项目。
    4. 在“项目”列表中,选择要导入到VSIX项目的外部程序集。

我向GitHub上传了一段引言。