Ich versuche, mit MSBuild eine Lösung mit einer bestimmten Zielplattform zu erstellen (ich benötige beide Binärdateien, x86 und x64). So habe ich es versucht:
C:\WINDOWS\Microsoft.NET\Framework\v3.5>MsBuild SolutionPath\Solution.sln /t:Rebuild /p:Configuration=Release /p:Platform="x86"
Der Build schlägt jedoch immer fehl, wenn sich die Plattform von "Beliebige CPU" unterscheidet. Was mache ich falsch?
Dies ist die while-Ausgabe, die MSBuild druckt:
C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5> MsBuild SolutionPath \ Solution.sln / t: Neu erstellen / p: Konfiguration = Release / p: Plattform = "x86" Microsoft (R) Build Engine Version 3.5.30729.1 [ Microsoft .NET Framework, Version 2.0.50727.3082] Copyright (C) Microsoft Corporation 2007. Alle Rechte vorbehalten.
Build gestartet 1.7.2010 8:28:10. Projizieren Sie "SolutionPath \ Solution.sln" auf Knoten 0 (Ziel (e) neu erstellen). SolutionPath \ Solution.sln: Fehler MSB4126: Die angegebene Lösungskonfiguration "Release | x86" ist ungültig. Bitte geben Sie eine gültige Lösungskonfiguration mit den Eigenschaften Konfiguration und Plattform an (z. B. MSBuild.exe Solution.sln / p: Konfiguration = Debug / p: Plattform = "Beliebige CPU") oder lassen Sie diese Eigenschaften leer, um die Standardlösungskonfiguration zu verwenden. Fertig Bauprojekt "SolutionPath \ Solution.sln" (Ziel (e) neu erstellen) - FEHLGESCHLAGEN.
Build FAILED.
"SolutionPath \ Solution.sln" (Ziel neu erstellen) (1) -> (ValidateSolutionConfiguration-Ziel) -> SolutionPath \ Solution.sln: Fehler MSB4126: Die angegebene Lösungskonfiguration "Release | x86" ist ungültig. Bitte geben Sie eine gültige Lösungskonfiguration mit den Eigenschaften Konfiguration und Plattform an (z. B. MSBuild.ex e Solution.sln / p: Konfiguration = Debug / p: Plattform = "Beliebige CPU") oder lassen Sie diese Eigenschaften leer, um die Standardlösungskonfiguration zu verwenden.
0 Warning(s) 1 Error(s)
Verstrichene Zeit 00: 00: 00.03
Wenn ich versuche, es mit devenv für x86 / x64 zu erstellen, funktioniert es einwandfrei. Ich versuche jedoch, einen Build-Server einzurichten, ohne alle erforderlichen Versionen von Visual Studio zu installieren. Übrigens, wenn es ein besseres kostenloses Tool gibt (das .NET Framework 4 unterstützt), würde ich gerne davon hören.
Win32
während moden .NET verwendetx86
Antworten:
Wenn Sie Ihre Lösung für x86 und x64 erstellen möchten, muss Ihre Lösung für beide Plattformen konfiguriert sein. Eigentlich haben Sie nur eine beliebige CPU- Konfiguration.
So überprüfen Sie die verfügbare Konfiguration für ein Projekt
Um die verfügbare Konfiguration für ein bestimmtes Projekt zu überprüfen, öffnen Sie beispielsweise die Projektdatei
*.csproj
und suchen Sie nach einerPropertyGroup
mit der rechtenCondition
.Wenn Sie im
Release
Modus für erstellen möchtenx86
, müssen Sie Folgendes in Ihrer Projektdatei haben:So erstellen und bearbeiten Sie die Konfiguration in Visual Studio
(Quelle: microsoft.com )
(Quelle: msdn.com )
(Quelle: msdn.com )
So erstellen und bearbeiten Sie die Konfiguration (auf MSDN)
quelle
Win32
anstelle vonx86
beispielsweiseCMake
generierten Projekten (libssh2
VerwendungenCMake
).Verwenden Sie in MSBuild oder Teamcity die Befehlszeile
oder verwenden Sie eine kürzere Form:
Sie müssen jedoch trotzdem eine Plattform in Ihrem Projekt einrichten, siehe die Antwort von Julien Hoarau.
quelle
Platform="Any CPU"
oderPlatform="Mixed Platforms"
für diejenigen, die es brauchen.Wenn Sie dies über die Befehlszeile versuchen, tritt möglicherweise ein Problem auf, bei dem eine maschinenweite Umgebungsvariable "Plattform" für Sie festgelegt wird und gegen Sie arbeitet. Ich kann dies reproduzieren, wenn ich das VS2012-Befehlsfenster anstelle eines normalen Windows-Befehlsfensters verwende.
Geben Sie an der Eingabeaufforderung Folgendes ein:
In einem VS2012-Befehlsfenster habe ich den Wert 'X64' voreingestellt. Das scheint alles in meiner Lösungsdatei zu stören.
In einem regulären Befehlsfenster führt der Befehl 'set' zu einer Meldung "Variable nicht definiert" ... was gut ist.
Wenn das Ergebnis Ihres obigen Befehls 'set' keinen Wert für Umgebungsvariablen zurückgibt, sollten Sie bereit sein.
quelle
Für VS2017 und 2019 ... mit den modernen SDK-Projektdateien der Kernbibliothek kann die Plattform während des Erstellungsprozesses geändert werden. Hier ist ein Beispiel für den Wechsel zur
anycpu
Plattform, kurz bevor die integrierteCoreCompile
Aufgabe ausgeführt wird:In meinem Fall erstelle ich ein FPGA mit
BeforeTargets
undAfterTargets
Aufgaben, kompiliere aber hauptsächlich eine C # -AppCoreCompile
. (teils, weil ich eine Art Befehlszeilen-App haben möchte, teils, weil ich nicht herausfinden konnte, wie ich sie weglassen oder überschreiben kannCoreCompile
)Um Build für mehr, gleichzeitige Binärdateien wie x86 und x64: entweder eine separate, manuelle Build - Task mit den jeweiligen Bedarf oder zwei separate Projektdateien werden würde
<PlatformTarget>x86</PlatformTarget>
und<PlatformTarget>x64</PlatformTarget>
Einstellungen im Beispiel oben.quelle