Wie kann ich MSBuild Kraft für 32-Bit-Modus zu kompilieren?
Frage
Ich bin mit MSBuild (via NAnt ) ein Bündel von VB.NET Baugruppen. Da diese Baugruppen auf COM-Interop abhängen, muss ich sicherstellen, dass sie auf 64-Bit-Betriebssystemen in 32-Bit-Modus ausgeführt werden. Ich kann die ausführbaren Baugruppen erhalte auf 32-Bit zu kompilieren, indem das Projekt in Visual Studio zu ändern, aber ich würde wirklich in der Lage sein mag alle die ausführbaren Dateien zu zwingen, auf 32-Bit-Modus auf dem Build-Server erstellt werden.
Ich habe kein Glück zu MSBuild eine Reihe von Befehlszeilenparametern versucht:
- / p: Platform = win32
- / p: Plattform = x86
- / p: = x86 Processor
Was mache ich falsch? Gibt es einen Bezug auf die Eigenschaften, die MSBuild verwendet, wenn VB Projekte Kompilieren?
Lösung
Wenn die Baugruppen selbst werden immer 32 Bit sein, warum nicht die Einstellung der .vbproj Datei hinzufügen? Das wird dauern MSBuild aus der Gleichung heraus.
Fügen Sie einfach die folgende Zeile in die Anfangsproperty in der .vbproj Datei
<PlatformTarget>x86</PlatformTarget>
Andere Tipps
Nach MSDN , tun Sie das Richtige. Sieht aus wie /p:Platform=x86
, aber eigentlich, vielleicht ist es /p:PlatformTarget=x86
.
nur MSBuild aufrufen, direkt mit diesem Parameter (stellen Sie sicher, es ist nicht ein Problem mit Ihrem NAnt Datei. Schauen Sie sich die Build-Ausgabe für den richtigen Build-Konfiguration ( Debug / Mitteilung ).
Für den Fall, das hilft, ich dieses Kommandozeilen verwendet, um meine x86-Plattform Ziel zu bauen:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe my.sln /t:build /p:Configuration=Release;Platform=x86
Im Projektmappen Explorer mit der rechten klicken Sie auf den Wurzelknoten -> Configuration Manager . Sie benötigen eine Lösung weite Konfiguration zu definieren, die jedes Projekt als 32-Bit zu bauen innerhalb anweist. (Anmerkung:. Sie wahrscheinlich schon eine haben, wenn Sie jemals mindestens ein Projekt zu bauen, wie 32-Bit gesetzt haben) Für eine Schritt-für-Schritt-Anleitung finden Sie in der MSDN Blog-Post Lösung Konfigurationen .
Dann geben Sie die gewünschte „Plattform“ und „Geschmack“ in Ihrer Teamzusammenstellung .proj
/ .targets
Dateien. Zum Beispiel:
<ConfigurationToBuild Include="Release|x86">
<FlavorToBuild>Release</FlavorToBuild>
<PlatformToBuild>x86</PlatformToBuild>
</ConfigurationToBuild>
Sie können angeben, mehr als eine dieser Eigenschaft Abschnitte gebaut mehrere Kombinationen zu haben. Ich würde copy / paste die „Release | x86“. String (oder was auch immer es aussieht) Datei direkt von Ihrem .sln
es, um sicherzustellen, passt genau - Sie es nicht direkt aus der Lösung Explorer bekommen
In Bezug auf Ihre Bemerkung:
MSBuild Immobilienbewertung ist ziemlich komplex, da es deklarative und zwingend notwendig Stile mischt. Sehen Sie sich die Blog-Post MSBuild Objektbewertung für Details. Ich möchte nicht auf ihre Feinheiten verlassen.
Es stimmt, dass in der Befehlszeile angegebenen Eigenschaften alles andere außer Kraft setzen sollte, aber Team Build eine weitere Ebene der Komplexität hat. Die ComputeConfigurationList Aufgabe wiederholt aufgerufen wird über eine rekursive MSBuild Invokation, nicht als eine gewöhnliche Aufgabe . Die Art und Weise dies aus zieht ist die gewöhnlichen Eigenschaften wie PlatformToBuild
zu nehmen und wickeln Sie sie in einer Reihe von globalen Eigenschaften genannt ConfigurationToBuild.PlatformToBuild
(usw.), die im laufenden Betrieb erzeugt werden, einmal für jede Konfiguration. Das macht das Team Build-Engine viel flexibler intern, aber es macht auch die Befehlszeile Verhalten Hacking Sie härter werden soll.
Sie könnten versuchen, ConfigurationToBuild.PlatformToBuild
auf der Kommandozeile Einstellung direkt - es könnte funktionieren, ich bin nicht sicher. Aber es wird auf jeden Fall verhindern, dass jemals mehr als eine Konfiguration in einer einzigen Builddefinition zu bauen. Aus diesem Grunde ich bleibe mit meinem Rat oben.
Nach dem exakt gleichen Problem auftritt, wechselte ich von der Nutzung der Version von MSBuild bei C:\WINDOWS\Microsoft.NET\Framework64
... auf die Version bei C:\WINDOWS\Microsoft.NET\Framework
(keine 64
) und Dingen zusammengestellt gut.
Für MSBuild Version 15 ist / P: PlatformTarget = x86
Die Nant msbuild-Task-Antwort auf diese Frage:
<msbuild project="your.sln">
<property name="PlatformTarget" value="x86" />
</msbuild>
Eine praktische Art, wie ich die richtige Immobilie zu finden, verwenden ist von einem des CSPROJ Projektes öffnen
Datei (im Fall von c #) und die Eigenschaft sehen, die betroffen ist, wenn Sie „x64“ / „AnyCPU“ / „x86“ aus Visual stdio. Was auch immer Eigenschaft, die geändert wird, müssen Sie diese Option setzen von der Kommandozeile. Mit Visual Studio 2015 scheint es,