Как собрать проект с конфигурацией платформы через devenv.exe \ com?

Я пытаюсь создать решение через devenv.com и получаю ошибки. Команда, которую я использую:

set devenvCom=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\devenv.com  
"%devenvCom%" "C:\...\mySolution.sln" /Build "Release|AnyCPU"  

Я получаю сообщение об ошибке: "Операция не может быть завершена"
Но если я запустил его без конфигурации платформы:

set devenvCom=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\devenv.com  
"%devenvCom%" "C:\...\mySolution.sln" /Build "Release"  

Это нормально работает.

Но в их документации говорится, что можно использовать формат: /Build "Release|AnyCPU"
И не имеет значения, если выполнить команду с помощью devenv.exe или devenv.com, они оба не пройдут.

Как я могу успешно выполнить команду?

Это кажется очень нелогичным и ненужным. Чего вы надеетесь достичь, задавая информацию о сборке вручную, а не просто используя встроенную опцию Build... (F5)?

absoluteAquarian 31.10.2018 14:09

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

Davis8988 31.10.2018 14:29

Для использования опции Build... не обязательно быть в сети. И в iirc на вкладке Build есть меню, которое позволяет редактировать параметры сборки.

absoluteAquarian 31.10.2018 14:32

Да, но что, если вы хотите строить в автономном режиме на нескольких платформах одну за другой в пакете, не открывая графический интерфейс и не настраивая конфигурацию сборки вручную? Я имею в виду, когда вы встраиваете "Win32", затем "x64" и т. д.

Davis8988 31.10.2018 14:35

Используя любой метод, вам все равно придется собрать, переместить исполняемый файл и его зависимости, а затем изменить настройки вручную.

absoluteAquarian 31.10.2018 14:38

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

Davis8988 31.10.2018 14:42
0
6
214
1

Ответы 1

Синтаксис, который у вас есть в обеих ваших командах - с платформой и без нее - правильный для devenv.com в Visual Studio 2017, согласно документации Microsoft на https://docs.microsoft.com/en-us/visualstudio/ide/reference/build-devenv-exe?view=vs-2017.

Я без проблем запускаю аналогичные команды с devenv.com в VS2019 через командный файл, запускаемый как часть задания Jenkins.

Следующие примечания могут помочь в решении этой проблемы:

При определении переменных среды для путей к файлам или папкам я предлагаю использовать двойные кавычки следующим образом:

set "devenvCom=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\devenv.com"

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

Параметр, следующий за /Строить, можно заключить в двойные кавычки, например / Сборка «Релиз». Эти двойные кавычки НЕОБХОДИМЫ при указании платформы, такой как / Сборка "Release | AnyCPU", чтобы гарантировать, что вертикальная полоса не будет неправильно интерпретирована оболочкой cmd.exe, или когда имя конфигурации сборки содержит пробел.

Я рекомендую / Восстановить вместо /Строить при выполнении автоматизированных сборок. Только первый гарантированно выполнит полную сборку с нуля.

В документации Microsoft указано «Вставьте один пробел между переключателями и аргументами в одной строке», т.е. поместите ОДИН ПРОБЕЛ между параметром /Строить и значением, которое следует за ним, например "Выпуск | AnyCPU".

Название конфигурации сборки и платформы, например "Выпуск | AnyCPU", как ожидается, будет найден в указанном файле решения. Эти имена конфигураций сборки и платформы решение не обязательно должны соответствовать именам и платформам конфигурации сборки проект (хотя должны, когда это возможно).

Если вы хотите построить только один проект, мне удалось использовать следующий синтаксис в VS2019:

"%devenvCom%" "C:\...\myProject.vcxproj" /Build "Release|AnyCPU" /Project "myProject"

Обратите внимание, что первым параметром в приведенном выше примере является файл проекта, а не файл решения. Я считаю, что указанные конфигурация сборки и платформа относятся к проект, а не к неопределенному решение (примечание: Visual Studio может создать временное решение при выполнении сборок одного проекта, если не может найти решение, соответствующее указанному проекту).

Для сборок одного проекта я раньше успешно указывал файл решения сначала, а файл проекта - после /Проект, но этот предыдущий синтаксис не всегда успешно работает в сборке VS2019 16.11.2 - это может привести к тому, что devenv.exe останется работать неопределенно долго после успешной сборки проекта. (devenv.exe запускается devenv.com).

Ваша установка VS2017 может быть повреждена, или у вас может быть расширение, которое мешает VS2017.

Другие вопросы по теме