Я пытаюсь создать приложение (.exe), которое будет использоваться для создания проектов в другой конфигурации с помощью Visual Studio Devenv.exe. Я попытался создать командный файл, чтобы сделать это как показано ниже:
cd "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE"devenv "%PROJECT_PATH%\MySolution.sln" /Rebuild "Release" /project "MyProject" /out "%PROJECT_PATH%\AutoBuildErrorLog.txt"
где project_path каталог, где MySolution.sln хранится.
А также Мой проект это проект под MySolution решение
Выше пакетный файл работает нормально и дает ожидаемый результат. т.е. MyProject успешно строится.
Теперь я пытаюсь запустить вышеуказанную команду через приложение exe. Я пытаюсь вызвать команду, как показано ниже:
const char devncmd[] = "C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/devenv.exe";
const char slncmd[] = "\"C:/Solution Folder with spaces in folder name/MySolution.sln\"";
const char rebuildCmd[] = "/Rebuild";
const char releasecfg[] = "Release";
const char projectcmd[] = "/project";
const char projectnamecmd[] = "MyProject";
const char outcmd[] = "/out";
const char outName[] = "\"C:/Solution Folder with spaces in folder name/AutoBuildErrorLog.txt\"";
int rc = _spawnlp(_P_WAIT, devncmd, slncmd,
rebuildCmd, releasecfg,
projectcmd, projectnamecmd,
outcmd, outName, NULL);
При запуске выше кода, я получил сообщение об ошибке ниже.
Выше сообщение убедить меня, что DevEnv.exe способен выполнить.
Далее я пытаюсь изменить путь решения (slncmd []), как показано ниже:
const char slncmd[] = "C:/Solution Folder with spaces in folder name/MySolution.sln";
Devenv работает без ошибок, но в моем файле AutoBuildErrorLog.txt Предполагается, что есть проблема с путем сборки.
The following files were specified on the command line:
Folder
Name/MySolution.sln
These files could not be found and will not be loaded.
Кто-нибудь может указать, что могло пойти не так?
Если вы посмотрите в папку, содержащую devenv.exe
Вы заметите, что есть также devenv.com
,
При автоматизации Visual Studio для сборок используйте devenv.com
, Пакетные файлы будут автоматически использовать .com
скорее, чем .exe
(из-за PATHEXT
переменная), и вы заметите, что ваш пакетный файл не указывает расширение.
PS. Вместо того, чтобы жестко задавать путь к devenv
— это можно изменить при установке — используйте VS120COMNTOOLS
Переменная окружения для построения пути (в пакетном файле:%VS120COMNTOOLS%..\ide\devenv
).