Проблема импорта пользовательских файлов .target приправленного проекта VSIX - PullRequest
2 голосов
/ 08 июля 2011

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

Первой проблемой, с которой мне пришлось столкнуться, был импорт файлов .targets в шаблон моего проекта.Я не могу дать полный путь к файлу .targets в шаблоне проекта, потому что изменяется версия моего пакета, и это заставляет установщик vsix поместить его в папку с версией на целевом компьютере.Я мог решить, как добавить переменную среды пользователя с корневым путем пакета, а затем обратиться к этой переменной среды в шаблоне проекта для импорта файла .targets.Это работает, как и ожидалось, с оговоркой.

Теперь предостережение о том, как я могу создать эту переменную среды в процессе развертывания VSIX.Я попытался украсить класс пакета с помощью пользовательского атрибута, полученного из RegistrationAttribute.Я переопределил метод Register для запуска Environment.SetEnvironmentVariable(), и он работает только тогда, когда я запускаю проект на своем компьютере разработчика.Очевидно, VSIXInstall.exe не заботится о запуске регистра атрибутов во время установки.

Было бы здорово, если кто-то может предложить подход для решения этой проблемы.У меня не хватает времени, и я уже столько всего перепробовал безуспешно: (

1 Ответ

2 голосов
/ 09 июля 2011

[Включая мой предыдущий ответ на этот же вопрос, заданный по электронной почте.]

Цели / задачи MSBuild, распространяемые через VSIX, не поддерживаются в Visual Studio 2010. Рекомендуется использовать MSI (или подобное развертывание).технологии) и поместите файлы целей в каталог по вашему выбору в папке% ProgramFiles% \ MSBuild.Затем вы можете ссылаться на них в шаблонах вашего проекта через $ (MSBuildExtensionsPath).

Установка VSIX - это, по сути, «распаковка» вашего VSIX.Вот и все.Там нет регистрации или возможности делать пользовательские действия вообще.Как вы уже упоминали, во время сборки запускается инструмент CreatePkgDef.exe (который загружает вашу сборку и вызывает ваш RegistrationAttribute) для создания файла pkgdef, который включен в ваш VSIX.

Я думаю, вы 'Вам потребуется выполнить одно из следующих действий:

  1. Отменить VSIX и использовать MSI для развертывания (рекомендуемый подход)
  2. Включить пользовательские цели в шаблон проекта ,Это плохо, потому что теперь цели разбросаны по проектам, а не установлены в одном месте, но это может быть приемлемым решением для вас.
  3. Выполните некоторую инициализацию (например, установив переменную среды) при «первом запуске»вашего пакета / расширения в рамках VS.Это, конечно, означает, что пользователи должны будут знать, что это необходимый шаг после установки.

Я понимаю, что ни одно из этих решений не является идеальным.Пожалуйста, знайте, что лучшая поддержка MSBuild с VSIX является нашей наиболее востребованной функцией, поэтому мы определенно получили обратную связь.

...