Как или почему MSBuild выбирает платформу x64, если я не указываю ее вместо AnyCPU? - PullRequest
14 голосов
/ 09 января 2012

Я запускаю msbuild.exe через Rake с обычной консоли PowerShell. Эта команда выводится с уровня диагностики

"C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe" "D: /Projects/machine.specifications/Source/Machine.Specifications/Machine.Specifications.csproj31881140" / maxcpucount / target: Build / подробность: диагностика / свойство: Configuration = Debug / свойство: TrackFileAccess = false / свойство: BuildInParallel = false / свойство: BuildRunner = Rake

И сборка не удалась, потому что msbuild выбирает x64 как Platform.

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets (483,9): ошибка: свойство OutputPath не задано для проекта «Machine.Specifications.csproj37103470». Пожалуйста, убедитесь, что вы указали правильную комбинацию конфигурации и платформы для этого проекта. Configuration = 'Debug' Platform = 'X64' . Возможно, вы видите это сообщение, потому что вы пытаетесь построить проект без файла решения и указали нестандартную конфигурацию или платформу, которые не существуют для этого проекта.

Я не передаю его в командной строке (или из скрипта). csproj имеет конфигурацию по умолчанию

<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

и две конкретные конфигурации

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

Итак, я ожидал, что будет выбрана платформа AnyCPU. Но по какой-то причине что-то выбирает или отправляет x64. Я не думаю, что система Rake является проблемой здесь, я уже видел такое поведение ранее при вызовах строки raw cmd в msbuild (но я их не задокументировал).

Я нахожусь на 64-битной Windows 7, вызываю msbuild 4.0. Я не знаю, имеет ли это отношение.


Я загружаю 64-разрядные инструменты Visual Studio (C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64), используя Invoke-BatchFile в своем профиле PowerShell. Может ли это быть виновником?

Почему в любом случае msbuild сознательно выбрал x64? 32-разрядная версия не выбирает x86 для вас.


* 1: консоль PowerShell находится на %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe * 2: Я использую сборку MSpec (вот этот rakefile и msbuild call )

1 Ответ

18 голосов
/ 10 января 2012

Когда вы запускаете командное окно Visual Studio x64, оно устанавливает переменную среды:

Platform=X64

Это отличие от 32-битного командного окна, где эта переменная среды не определена, и MSBuild затем использует условную логику для использования платформы по умолчанию.

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

...