Подтвердить что ты не робот

Как и почему MSBuild выбирает платформу x64, когда я не укажу ее вместо AnyCPU?

Я запускаю 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/verbosity: diagnostic/property: Configuration = Debug/property: TrackFileAccess = false/property: BuildInParallel = false/свойство: BuildRunner = Rake

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

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

Я не передаю его в командной строке (или из script). 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 является проблемой здесь, я видел это поведение раньше, чем на сырые вызовы 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 build (здесь rakefile и вызов msbuild)

4b9b3361

Ответ 1

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

Platform=X64

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

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