Как указать платформу для 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" выше не возвращает значение переменной среды, вам должно быть хорошо идти.