Я пытаюсь использовать MSBuild для создания решения с указанной целевой платформой (мне нужны оба бинарных файла, x86 и x64). Вот как я это попробовал:
C:\WINDOWS\Microsoft.NET\Framework\v3.5>MsBuild SolutionPath\Solution.sln /t:Rebuild /p:Configuration=Release /p:Platform="x86"
Однако сборка всегда дает сбой, если платформа отличается от «Любого процессора». Что я делаю не так?
Это время вывода MSBuild печатает:
C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5> MsBuild SolutionPath \ Solution.sln / t: перестроить / p: конфигурация = выпуск / p: платформа = "x86" Microsoft (R) Build Engine версии 3.5.30729.1 [ Microsoft .NET Framework, версия 2.0.50727.3082] Copyright (C) Microsoft Corporation 2007. Все права защищены.
Сборка началась 1.7.2010 8:28:10. Проект «SolutionPath \ Solution.sln» на узле 0 (перестроить цели t (s)). SolutionPath \ Solution.sln: ошибка MSB4126: указана недопустимая конфигурация решения "Release | x86". Укажите допустимое значение конфигурации решения, используя свойства Configuration и Platform (например, MSBuild.exe Solution.sln / p: Configuration = Debug / p: Platform = "Any CPU"), или оставьте эти свойства пустыми, чтобы использовать конфигурацию решения по умолчанию. Готово Создание проекта "SolutionPath \ Solution.sln" (перестроить объект (ы)) - СБОЙ.
Сборка не удалась.
"SolutionPath \ Solution.sln" (цель перестроения) (1) -> (цель ValidateSolutionConfiguration) -> SolutionPath \ Solution.sln: ошибка MSB4126: указанная конфигурация решения "Release | x86" недопустима. Укажите допустимую конфигурацию решения, используя свойства Configuration и Platform (например, MSBuild.ex e Solution.sln / p: Configuration = Debug / p: Platform = "Any CPU"), или оставьте эти свойства пустыми, чтобы использовать конфигурацию решения по умолчанию.
0 Warning(s) 1 Error(s)
Прошедшее время 00: 00: 00.03
Если я пытаюсь собрать его для x86 / x64 с помощью devenv, он работает отлично, однако я пытаюсь настроить сервер сборки без установки всех необходимых версий Visual Studio. Кстати, если есть лучший бесплатный инструмент (который поддерживает .NET Framework 4), я бы хотел услышать об этом.
Win32
то время как современные .NET используетx86
Ответы:
Если вы хотите создать решение для x86 и x64 , оно должно быть настроено для обеих платформ. На самом деле у вас просто есть конфигурация Any CPU .
Как проверить доступную конфигурацию для проекта
Чтобы проверить доступную конфигурацию для данного проекта, откройте файл проекта (
*.csproj
например) и найдитеPropertyGroup
справаCondition
.Если вы хотите встроить
Release
режим дляx86
, у вас должно быть что-то вроде этого в вашем файле проекта:Как создать и изменить конфигурацию в Visual Studio
(источник: microsoft.com )
(источник: msdn.com )
(источник: msdn.com )
Как создать и изменить конфигурацию (на MSDN)
источник
Win32
вместо,x86
например,CMake
сгенерированные делают (libssh2
используетCMake
).В MSBuild или Teamcity используйте командную строку
или используйте более короткую форму:
Однако вам все равно нужно настроить платформу в своем проекте, см. Ответ Жюльена Хорау.
источник
Platform="Any CPU"
илиPlatform="Mixed Platforms"
для тех, кому это нужно.Если вы пытаетесь сделать это из командной строки, вы можете столкнуться с проблемой, когда переменная среды платформы «Платформа» устанавливается для вас и работает против вас. Я могу воспроизвести это, если я использую окно команд VS2012 вместо обычного окна команд Windows.
В командной строке введите:
В командном окне VS2012 у меня есть предустановленное значение «X64». Кажется, это мешает тому, что находится в моем файле решения.
В обычном командном окне команда 'set' приводит к сообщению "переменная не определена" ... что хорошо.
Если результат вашей команды 'set', приведенной выше, не возвращает значения переменной окружения, вам стоит пойти дальше.
источник
Для VS2017 и 2019 ... с файлами проекта SDK современной базовой библиотеки платформу можно изменить в процессе сборки. Вот пример перехода на
anycpu
платформу непосредственно перед запуском встроеннойCoreCompile
задачи:В моем случае, я построение FPGA с
BeforeTargets
иAfterTargets
задачами, но компиляции # приложения C в основномCoreCompile
. (отчасти потому, что мне может понадобиться какое-то приложение для командной строки, а отчасти потому, что я не мог понять, как его опустить или переопределитьCoreCompile
)Для того, чтобы построить для нескольких, одновременно исполняемых файлов , таких как x86 и x64: либо отдельная, ручная сборка задача была бы необходима или два отдельными файлы проект с соответствующими
<PlatformTarget>x86</PlatformTarget>
и<PlatformTarget>x64</PlatformTarget>
настройками в примере выше.источник