Как импортировать класс из внешней сборки в расширение текстового редактора Visual Studio? - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь разработать расширение текстового редактора для 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 голосов
/ 17 апреля 2019

Я нашел решение.

  1. Откройте исходный файл extension.vsixmanifest в проекте VSIX.
  2. На вкладке Ресурсы добавьте внешнюю сборку в качестве MefComponent.
    1. Нажмите кнопку «Создать»
    2. . В списке «Тип» выберите Microsoft.VisualStudio.MefComponent.
    3. В списке «Источник» выберите проект «А» в текущем решении.
    4. В списке Проект выберите внешнюю сборку, которую вы хотите импортировать в проект VSIX.

Я загрузил экзамен в GitHub .

...