Создание проектной системы Visual Studio с помощью MEF и VSIX - программирование
Подтвердить что ты не робот

Создание проектной системы Visual Studio с помощью MEF и VSIX

Я ищу создать пользовательскую систему проекта для Visual Studio. Но некоторые материалы в Интернете меня несколько смутили. Все они относятся к VSPackages, и, насколько я могу судить, это совсем другие вещи от VSIX. Моя существующая функциональность расширения предлагается через VSIX. Невозможно ли предлагать новый тип проекта через VSIX?

Я также посмотрел их пример кода, и это был отвратительный COM-материал. Нет ли новых блестящих материалов MEF для проектов, например, для расширения редактора с подсветкой синтаксиса и т.д.

4b9b3361

Ответ 1

Нет поддержки /API MEF для реализации поддержки новой системы проекта. Существует два способа реализации поддержки.

  • Внедрить API Visual Studio напрямую. Этот параметр чрезвычайно сложный, но не ограничивает вас конкретной системой сборки или файловым форматом. Если вы выберете это, вы в основном по своему усмотрению.
  • Используйте библиотеку управляемых пакетов (MPF) в качестве отправной точки. Эта опция намного проще, если вы ограничены использованием MSBuild для вашего формата проекта и системы сборки.

Предполагаю, что вы идете с опцией № 2.

Библиотека MPF когда-то была частью SDK Visual Studio, но в конце концов перешла в CodePlex примерно в то время, когда была выпущена Visual Studio 2010. Вместо этого, этот пост будет посвящен версии этой библиотеки, которую я модифицировал и выпустил на GitHub. Эта версия библиотеки имеет много преимуществ перед другими предыдущими версиями, некоторые из которых задокументированы в readme, который показывает, когда вы следуете этой ссылке.

Управляемая инфраструктура пакетов для Visual Studio 2010

Чтобы реализовать поддержку вашего языка, вам необходимо сделать следующее.

  • Поддержка командной строки MSBuild для вашего языка.

    • Создайте файл проекта.
    • Создайте один или несколько MSBuild *.targets, необходимых для создания проектов на вашем языке.
    • Это, скорее всего, будет связано с созданием сборки для выполнения задач пользовательской сборки.
  • Создайте VSPackage для реализации поддержки вашего проекта MSBuild в среде IDE. Это позволит Visual Studio открывать/сохранять/закрывать файлы проекта с помощью расширения, которое вы выбрали.

  • Создайте один или несколько шаблонов проектов, чтобы пользователи могли создавать новый проект для вашего языка в среде IDE.

  • Создайте один или несколько шаблонов элементов проекта, чтобы пользователи могли легко добавлять файлы в проект.

Этот ответ только просматривает поверхность прямо сейчас, но вы задали очень широкий вопрос, и, к сожалению, у меня нет времени прямо сейчас, чтобы подробно рассказать обо всех аспектах этого.

Изменить: Что касается развертывания - вы можете и должны включить свой VSPackage внутри VSIX. Однако, поскольку вашему расширению потребуется установить расширения MSBuild в том месте, в котором пользовательские проекты имеют стандартный доступ к (C:\Program Files\MSBuild или C:\Program Files (x86)\MSBuild), вам придется обернуть все это в установщик, чтобы обеспечить пользовательскую установку. Я рекомендую использовать WiX для этого; он не тривиальный, но он бесплатный, работает исключительно и надежно, и не слишком сложно использовать, как только вы его повесите.

Ответ 2

К сожалению, Visual Studio API действительно уродлив. Если вы сделаете глубокую интеграцию с внутренними механизмами Visual Studio, вам придется использовать "отвратительный COM". Непосредственно или через управляемые обертки (Interop Assemblies). Чтобы избежать путаницы, я пытаюсь объяснить концепции расширяемости Visual Studio и опубликовать полезные ссылки на документацию. Надеюсь, это поможет вам.

Вы можете расширить Visual Studio с помощью расширений макросов, надстроек, VSPackages и расширенной функциональности (MEF). Начиная с Visual Studio 2012, расширения Visual Studio no поддерживают макросы! Однако используйте VSPackages, чтобы предоставить больше возможностей. Подробнее см.

Начиная с Visual Studio 2010, вы можете использовать MEF для настройки редактора Visual Studio. Однако вы можете комбинировать расширение MEF с VSPackage. Как это сделать, вы можете прочитать следующие ссылки.

По моему мнению, использование MEF имеет незначительные преимущества.

Чтобы создать пользовательский тип проекта для Visual Studio, вы должны использовать Шаблоны Visual Studio. Это технология, отличная от VSPackage и других расширенных методов. Это позволяет Visual Studio поддерживать проекты нового типа и добавлять нового мастера проектов.

Для распространения пакета вы можете использовать файлы VSIX или MSI. Любой из них может содержать VSPackage, Шаблоны Visual Studio, зависимые библиотеки, значки, файлы конфигурации и т.д. Установщики VSIX и MSI поддерживают портал visualstudiogallery. Однако Visual Studio может автоматически обновлять только файл VSIX из visualstudiogallery.

По умолчанию VSIX (как пакет развертывания) и VSPackage (как начальная точка плагина) находятся в одном проекте, но вы можете разделить их на разные проекты или использовать msi вместо vsix.