2013-04-01 6 views
6

Ich verwende Visual Studio 2010, um ein C# -Projekt zu erstellen, das über x86- und x64-Ziele verfügt. Wenn ich mit der IDE baue, bekomme ich das korrekte Ergebnis von x64- und x86-Zielen.Erstellen von x64-C# -Projekt mit Msbuild-Ergebnissen in 32-Bit-Zielen

Wenn ich Msbuild in der Befehlszeile verwende, bekomme ich alles in x86 erstellt, obwohl ich x64 in der Befehlszeile angeben.

Ich hatte dieses Problem nicht, bis ich von .Net 4.0 auf .Net 4.5 aktualisiert.

Mit .Net 4.0 konnte ich meine x64-Ziele erhalten, auch wenn ich x86 in der Befehlszeile angegeben.

Ich habe einen Build in der .Net 4.0-Umgebung und dann einen anderen Build in der .Net 4.5-Umgebung und piped die Ausgabe in Protokolldateien. Ich habe bemerkt, einige Unterschiede in den Log-Dateien, aber ich denke, das ist, was mein Problem verursacht:

In .Net 4.0 ich diese Zeile in der Protokolldatei:

/Referenz: C: \ Windows \ Microsoft. Net \ assembly \ GAC_MSIL \ Microsoft.CSharp \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ Microsoft.CSharp.dll

in .Net 4.5 ich diese Zeile in der Protokolldatei: /r: "C: \ Program Files (x86) \ Referenz-Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ Microsoft.CSharp.dll "

Irgendwelche Ideen? Es scheint .Net 4.5 verwendet einen x86-spezifischen Pfad.

+1

Welche Befehlszeile verwenden Sie zum Ausführen von Msbuild? Erstellst du eine sln oder csproj Datei? Wie übergibt man eine bestimmte Konfiguration? – Lanorkin

+0

msbuild project.sln/p: Platform = "x64"/t: Reinigen; Rebuild/p: Konfiguration = Debug – Tony

+0

Ist die Konfiguration in dieser Zeile am Anfang des Logbuchs 'Building solution configuration" Debug | x64 "'? Wie verstehen Sie, dass die Ergebnisse falsch sind? Welche Ausgabe-Verzeichnisse werden erstellt - 'bin \ x86 \ Debug' oder' bin \ x64 \ Debug'? – Lanorkin

Antwort

5

Dies kann passieren, wenn die x64-Konfiguration Ihrer Lösung so konfiguriert ist, dass sie ein Projekt als AnyCPU erstellt. Eine neue Konfigurationsoption in .Net 4.5, Prefer 32 bit, macht ausführbare Dateien mit Prefer32bit-Flag zum Starten als 32-Bit-Prozesse auf 64-Bit-Maschine. Da das Prefer32bit-Flag in MSBuild-Zielen standardmäßig festgelegt ist, wird das von Ihnen beschriebene Verhalten angezeigt. Wenn Sie beispielsweise von .Net 4.0 auf .Net 4.5 aktualisieren, wird Ihr AnyCPU-Projekt von 64 Bit auf 32 Bit umgestellt.

Um x64 gebaut Projekt (nicht Lösung) zu machen, ist es auf der Kommandozeile angeben:

msbuild project.csproj /p:Platform=x64 

Hinweis, die Befehlszeile für CSPROJ ist, nicht für SLN.

Alternativ können Sie Ihre Lösungskonfiguration im Konfigurationsmanager überprüfen und sicherstellen, dass sie als x64 erstellt wird.

+1

Danke! Ich konnte/property: Prefer32bit = false zu meiner Msbuild-Befehlszeile hinzufügen und es sieht so aus, als ob das Problem gelöst wird. – Tony

+0

Welchen Switch mit Msbuild verwenden, um eine 64-Bit-Lösung zu erstellen? –

Verwandte Themen