Как указать платформу для MSBuild?

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

C:\WINDOWS\Microsoft.NET\Framework\v3.5>MsBuild SolutionPath\Solution.sln /t:Rebuild /p:Configuration=Release /p:Platform="x86"

Однако сборка всегда терпит неудачу, если платформа отличается от "Any CPU". Что я делаю неправильно?

Это вывод вывода MSBuild:

C:\WINDOWS\Microsoft.NET\Framework\v3.5 > MSBuild SolutionPath\Solution.sln/t: перестроить /Р: Конфигурация = релиз /p: Платформа = "x86" Microsoft (R) Build Версия двигателя 3.5.30729.1 [Microsoft.NET Framework, версия 2.0.50727.3082] Авторское право (C) Microsoft Corporation 2007. Все права защищены. зарезервирован.

Сборка началась 1.7.2010 8:28:10. Проект "SolutionPath\Solution.sln" на node 0 (перестроить t (t)). SolutionPath\Solution.sln: ошибка MSB4126: Указанный раствор Конфигурация "Release | x86" - инвалид. Укажите действительный решения с использованием Свойства конфигурации и платформы (например, MSBuild.exe Solution.sln /Р: Конфигурация = отладки /p: Платформа = "Любой процессор" ) или оставить эти proprofties blank для использования по умолчанию конфигурации решения. Сделано здание Проект "SolutionPath\Solution.sln" (Восстановить t arget (s)) - FAILED.

Сборка FAILED.

"SolutionPath\Solution.sln" (перестроить цель) (1) → (Целевое значение ValidateSolutionConfiguration) → SolutionPath\Solution.sln: ошибка MSB4126: Указанная информация Конфигурация "Release | x86" - инвалид. Укажите действительный конфигурации решения с использованием Свойства конфигурации и платформы (например, MSBuild.ex e Solution.sln /Р: Конфигурация = отладки /p: Платформа = "Любой процессор" ) или оставить эти pro perties пустой для использования по умолчанию конфигурации решения.

0 Warning(s)
1 Error(s)

Истекшее время 00: 00: 00.03

Если я попытаюсь построить его для x86/x64 с devenv, он отлично работает, однако я пытаюсь настроить сервер сборки без установки всех необходимых версий Visual Studio. Кстати, если есть лучший бесплатный инструмент (поддерживающий .NET framework 4), я бы хотел услышать об этом.

Ответ 1

Если вы хотите создать свое решение для x86 и x64, ваше решение должно быть настроено для обеих платформ. На самом деле у вас просто есть конфигурация Any CPU.

Как проверить доступную конфигурацию для проекта

Чтобы проверить доступную конфигурацию для данного проекта, откройте файл проекта (например, *.csproj) и найдите PropertyGroup с правом Condition.

Если вы хотите построить Release режим x86, вы должны иметь что-то вроде этого в файле проекта:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
  ...
</PropertyGroup>

Как создать и отредактировать конфигурацию в Visual Studio

панель Configuration Manager http://i.msdn.microsoft.com/Cc563937.11a492fe-e240-4cdd-9b53-b6aae7224b09(en-us,office.12).jpg

Кнопка новой платформы решений http://blogs.msdn.com/blogfiles/habibh/WindowsLiveWriter/9d46e66e51d6_13278/image_15.png

Новая панель платформы решений http://blogs.msdn.com/blogfiles/habibh/WindowsLiveWriter/9d46e66e51d6_13278/image_18.png

Как создать и отредактировать конфигурацию (на MSDN)

Ответ 2

В MSBuild или Teamcity используйте командную строку

MSBuild yourproject.sln /property:Configuration=Release /property:Platform=x64

или используйте более короткую форму:

MSBuild yourproject.sln /p:Configuration=Release /p:Platform=x64

Однако вам все равно нужно настроить платформу в своем проекте, см. ответ Жюльена Хоарау.

Ответ 3

Если вы пытаетесь сделать это из командной строки, вы можете столкнуться с проблемой, когда для вас задается общая переменная среды "Платформа" и работает против вас. Я могу воспроизвести это, если я использую командное окно VS2012 вместо обычного окна команд Windows.

В командной строке введите:

установить платформу

В командном окне VS2012 у меня есть значение "X64". Кажется, это мешает всему, что находится в моем файле решения.

В обычном командном окне команда 'set' выводит сообщение "variable not defined"... это хорошо.

Если результат вашей команды "set" выше не возвращает значение переменной среды, вам должно быть хорошо идти.