18 Stimmen

Wie oder warum wählt MSBuild die x64-Plattform aus, wenn ich sie nicht spezifiziere, anstelle von AnyCPU?

Ich führe msbuild.exe über Rake von einer normalen PowerShell-Konsole aus. Dies ist der Befehl, wie er bei einem Diagnose-Lauf ausgegeben wird

"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 /property:BuildRunner=Rake

Und der Build schlägt fehl, weil msbuild x64 als Plattform wählt.

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(483,9): error : Die OutputPath-Eigenschaft ist nicht für das Projekt 'Machine.Specifications.csproj37103470' festgelegt. Bitte überprüfen Sie, ob Sie eine gültige Kombination von Konfiguration und Plattform für dieses Projekt angegeben haben. Konfiguration='Debug' Plattform='X64'. Möglicherweise erhalten Sie diese Meldung, weil Sie versuchen, ein Projekt ohne Lösungsdatei zu erstellen und eine nicht standardmäßige Konfiguration oder Plattform angegeben haben, die für dieses Projekt nicht vorhanden ist.

Ich gebe das nicht über die Befehlszeile (oder vom Skript) ein. Das csproj hat eine Standardkonfiguration

Debug
AnyCPU

und zwei spezifische Konfigurationen

Also habe ich erwartet, dass die Plattform AnyCPU ausgewählt wird. Aber aus irgendeinem Grund wird etwas mit x64 ausgewählt oder übermittelt. Ich glaube nicht, dass das Rake-System hier ein Problem ist, ich habe dieses Verhalten bereits bei direkten Aufrufen von msbuild auf der Befehlszeile gesehen (aber ich habe sie nicht dokumentiert).

Ich verwende Windows 7 64-Bit, rufe msbuild 4.0 auf. Ich weiß nicht, ob das relevant ist.


Ich lade die 64-Bit Visual Studio-Tools (C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64) mithilfe von Invoke-BatchFile in meinem PowerShell-Profil. Könnte das der Übeltäter sein?

Warum würde msbuild bewusst x64 wählen? Die 32-Bit-Version wählt nicht automatisch x86 für Sie aus.


*1: Die PowerShell-Konsole befindet sich unter %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe *2: Ich führe den MSpec-Build aus (hier ist das Rakefile und der msbuild-Aufruf)

19voto

seva titov Punkte 11380

Wenn Sie das Visual Studio x64 Befehlsfenster starten, wird eine Umgebungsvariable festgelegt:

Platform=X64

Dies ist ein Unterschied zum 32-Bit-Befehlsfenster, in dem diese Umgebungsvariable nicht definiert ist und MSBuild dann die bedingte Logik verwendet, um die Standardplattform zu verwenden.

Sie können entweder die Platform-Umgebungsvariable in Ihrer Batch-Datei entfernen oder die explizite Platform-Eigenschaft als Parameter an MSBuild übergeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X