it-swarm.com.de

Wie zwinge ich MSBuild, für den 32-Bit-Modus zu kompilieren?

Ich verwende MSBuild (über NAnt ), um eine Reihe von VB.NET - Assemblys zu erstellen. Da diese Assemblys von COM Interop abhängen, muss ich sicherstellen, dass sie im 32-Bit-Modus auf 64-Bit-Betriebssystemen ausgeführt werden. Ich kann die ausführbaren Assemblys in 32-Bit kompilieren lassen, indem Sie das Projekt in Visual Studio ändern. Ich möchte jedoch wirklich gerne die Möglichkeit haben, alle ausführbaren Dateien auf dem Build-Server in den 32-Bit-Modus zu kompilieren.

Ich habe mehrere Befehlszeilenparameter für MSBuild ohne Erfolg ausprobiert:

  • / p: Plattform = win32
  • / p: Plattform = x86
  • / p: ProcessorArchitecture = x86

Was mache ich falsch? Gibt es einen Hinweis auf die Eigenschaften, die MSBuild beim Kompilieren von VB -Projekten verwendet?

30
Eric Nicholson

Wenn die Baugruppen selbst immer 32-Bit sein werden, können Sie die Einstellung zur .vbproj-Datei hinzufügen. Das wird MSBuild aus der Gleichung herausnehmen. 

Fügen Sie einfach die folgende Zeile zur ursprünglichen PropertyGroup in der .vbproj-Datei hinzu

<PlatformTarget>x86</PlatformTarget>
20
JaredPar

Laut MSDN machen Sie das Richtige. Sieht aus wie /p:Platform=x86, aber vielleicht ist es /p:PlatformTarget=x86.

Versuchen Sie, MSBuild einfach direkt mit diesem Parameter aufzurufen (stellen Sie sicher, dass es sich bei Ihrer NAnt-Datei nicht um ein Problem handelt. Überprüfen Sie die Build-Ausgabe auf die richtige Build-Konfiguration (Debug/Release).

46
Nader Shirazie

Für den Fall, dass dies hilft, habe ich diese Befehlszeile zum Erstellen meines x86-Plattformziels verwendet:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe my.sln /t:build /p:Configuration=Release;Platform=x86
13
MrHam

Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Stammknoten -> Configuration Manager. Sie müssen eine lösungsweite Konfiguration definieren, in der jedes Projekt als 32-Bit-Version erstellt wird. (Hinweis: Sie haben wahrscheinlich bereits eines, wenn Sie mindestens ein Projekt als 32-Bit-Build festgelegt haben.) Eine schrittweise Anleitung finden Sie im MSDN-Blogbeitrag Lösungskonfigurationen. .

Dann geben Sie die gewünschte "Plattform" und "Geschmack" in Ihren Team Build.proj.targets-Dateien an. Zum Beispiel:

<ConfigurationToBuild Include="Release|x86">
    <FlavorToBuild>Release</FlavorToBuild>
    <PlatformToBuild>x86</PlatformToBuild>
</ConfigurationToBuild>

Sie können mehrere dieser Eigenschaftsabschnitte angeben, um mehrere Kombinationen zu erstellen. Ich würde die Zeichenfolge "Release | x86" (oder wie auch immer sie aussieht) direkt aus Ihrer .sln-Datei kopieren/einfügen, um sicherzustellen, dass sie genau übereinstimmt - Sie können sie nicht direkt im Projektmappen-Explorer abrufen.

Zu Ihrem Kommentar:

Die MSBuild-Eigenschaftsbewertung ist ziemlich komplex, da deklarative und imperative Stile gemischt werden. Weitere Informationen finden Sie im Blogbeitrag _/ MSBuild Property Evaluation. Ich ziehe es vor, mich nicht auf die Feinheiten zu verlassen. 

Es stimmt, dass in der Befehlszeile angegebene Eigenschaften alles andere überschreiben sollten, aber Team Build weist eine andere Komplexitätsebene auf. Die ComputeConfigurationList-Task wird wiederholt über einen rekursiven MSBuild-Aufruf aufgerufen, nicht als gewöhnliche Task . Die Art und Weise, wie dies geschieht, besteht darin, die gewöhnlichen Eigenschaften wie PlatformToBuild zu nehmen und sie in einen Satz globaler Eigenschaften namens ConfigurationToBuild.PlatformToBuild (usw.) zu hüllen, die im laufenden Betrieb einmal für jede Konfiguration generiert werden. Dies macht die Team Build-Engine intern viel flexibler, hackt aber auch das gewünschte Befehlszeilenverhalten, das Sie härter machen möchten.

Sie könnten versuchen, ConfigurationToBuild.PlatformToBuild in der Befehlszeile direkt einzustellen - es funktioniert möglicherweise, ich bin mir nicht sicher. Es wird jedoch definitiv verhindern, dass Sie mehr als eine Konfiguration in einer einzigen Build-Definition erstellen. Aus diesem Grund halte ich mich an meinen oben genannten Rat.

3
Richard Berg

Nachdem ich genau das gleiche Problem hatte, wechselte ich von der Verwendung der MSBuild-Version unter C:\WINDOWS\Microsoft.NET\Framework64... zur Version unter C:\WINDOWS\Microsoft.NET\Framework (kein 64), und die Dinge kompilierten einfach.

2
Jeb

Für MSBuild Version 15 ist es/p:PlatformTarget=x86

2
Turker Tunali

Die Nant msbuild-Task Antwort auf diese Frage:

<msbuild project="your.sln">
    <property name="PlatformTarget" value="x86" />
</msbuild>
1
dwonisch

Ein praktischerer Weg, die richtige Eigenschaft zu finden, ist das Öffnen eines .csproj-Projekts Datei (im Falle von c #) und sehen Sie die Eigenschaft, die betroffen ist, wenn Sie "x64"/"AnyCPU"/"x86" aus Visual stdio auswählen. Welche Eigenschaft auch immer geändert wird, Sie müssen diese über die Befehlszeile festlegen. Mit Visual Studio 2015 scheint es <Platform> zu sein. Sie können also msbuild mit dem Argument/p aufrufen: Platform = x64 und es sollte funktionieren.

0
Soundararajan