Заставляем задачу Exec MSBuild отображать интерактивную оболочку - PullRequest
1 голос
/ 15 июня 2011

Следующие два абзаца являются справочными - они просто объясняют , почему Мне нужно сделать такую ​​странную вещь.Если вам все равно, вы можете пропустить их и перейти непосредственно к вопросу.
Я - пользователь Vim, и я начал изучать C #.Естественно, я хочу использовать MSBuild в качестве моей makeprg.Я хочу связать горячие клавиши для обычных операций разработки - Сборка , Очистка и Запуск .Поскольку я хочу установить свои горячие клавиши глобально, у меня есть проблема, поскольку имена файлов различны в каждом проекте.

В GCC / MinGW эту проблему можно легко решить - поскольку я уже хранюважные имена файлов в переменных, я могу просто добавить к целям makefile для очистки сборки и запуска программы, а затем привязать горячие клавиши к «: make! Clean» и «: make! Run».Поэтому я решил, что могу сделать то же самое с целями MSBuild.Он отлично работает для Очистка с тегом Delete (не уверен, что мне действительно нужно очистить в .NET, но вы знаете - по привычке), но у меня проблема с Выполнить .

Теперь это моя проблема: в отличие от make-файлов GCC / MinGW, которые являются просто умными пакетными файлами, которые запускают команды оболочки, MSBuild использует свой собственный набор команд и запускает их внутренне.Это означает, что задачи Exec запускают программу без оболочки - я могу открывать окна, но не могу использовать ее для тестирования интерактивных программ оболочки.

Есть ли способ убедить MSBuildдай мне интерактивную оболочку?

1 Ответ

2 голосов
/ 15 июня 2011

Вы пробовали какой-то вариант этого,

<Exec Command="start $(COMSPEC) /k &quot;$(PathTo)\My.exe &amp; exit&quot;" />

После выхода из него все получается примерно так:

C:\Windows\system32\cmd.exe /k "PathTo\My.exe & exit"

, который будет выполнять вашу команду в командной оболочке (/ kможет не подходить для вашего использования cmd), тогда когда ваша интерактивная программа завершит работу, она запустит команду «exit» и двинется дальше.


...