Упакуйте .exe в .vsix и вызовите расширение Visual Studio - PullRequest
7 голосов
/ 08 февраля 2012

У меня есть пакет Visual Studio, который выполняет часть своей работы, запуская внешний процесс (используя System.Diagnostics.Process) и взаимодействуя с ним через стандартный ввод / вывод. В настоящее время у меня есть путь к жестко запрограммированному .exe, который явно не работает для фактического развертывания расширения. Как правильно упаковывать и распространять .exe с расширением? (Кроме того, после того, как я это сделал, как мне программно найти путь к установленному файлу .exe.) Желательно, чтобы я поместил его в файл .vsix, чтобы установка была простой.

РЕДАКТИРОВАТЬ: Я поместил соответствующую часть моего кода в BitBucket (это может быть полезно для других, использующих Roslyn): roslyn_process , чтобы дать лучшее представление о том, что Я пытаюсь сделать. Этот код устанавливает связь между расширением Visual Studio с использованием реализации AbstractProcessHandler и отдельным процессом с использованием RoslynProcess. Последний постоянно информируется об изменениях файлов кода в Visual Studio и о том, какой файл кода просматривается, поэтому он может выполнять анализ с актуальной информацией, несмотря на то, что он не работает как расширение Visual Studio, что налагает ограничения Рослин на весь редактируемый код.

РЕДАКТИРОВАТЬ 2: Используя этот ответ , я могу получить каталог расширения. Я могу включить другой пакет в source.extension.vsixmanifest, добавив его в список контента как тип «Пользовательский тип расширения». Затем .exe появляется в каталоге расширения. Похоже, что это правильное решение, хотя способ получения каталога помечен в MSDN как то, что я не должен использовать.

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

1 Ответ

6 голосов
/ 18 февраля 2012

Один из самых простых подходов к этому состоит в том, чтобы ваша DLL-библиотека пакета имела ссылку на проект на EXE и делала ваш класс точки входа (или некоторый класс в EXE) публичным.Затем вы можете просто написать:

typeof(ExternalProcess).Assembly.Location

, который дает вам путь к EXE внутри вашего пути расширения.

Другая приятная часть этого - упаковщик VSIX должен включать EXE вVSIX автоматически, так как это ссылка на проект.Вам вообще не нужно ничего вставлять в ваш .vsixmanifest для EXE.

...