webentwicklung-frage-antwort-db.com.de

Wie verwende ich MSBuild, um ein Toolset für die v110-Plattform als Ziel festzulegen?

Ich entwickle gerade eine Befehlszeilenanwendung, die eine vollständige Visual Studio 11-Lösung erstellt, die aus einem einzelnen VC++ - Projekt besteht und am Ende versucht, sie mit MSBuild zu kompilieren.

Das Problem, mit dem ich konfrontiert bin, ist seltsam. 

Wenn ich mein Befehlszeilenprogramm in Visual Studio 11 ausführen, funktioniert es. Wenn ich es stattdessen außerhalb der Entwicklungsumgebung starte, wird mir der Fehler angezeigt:

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(511,5): error MSB8008: Specified platform toolset (v110) is not installed or invalid. Please make sure that a supported PlatformToolset value is selected. [f:\ABC.vcxproj]

Der Befehl, den ich verwende, ist folgender:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe f:\snake\W9A30040.vcxproj /property:PlatformToolset=v110;Configuration=Debug /v:quiet

Ich habe jedoch das Gefühl, dass PlatformToolset = v110 ignoriert wird und MSBuild v100 (Visual Studio 2010) verwendet.

Haben Sie Vorschläge, wie Sie MSBuild anweisen sollen, für das v110 Platform Toolset zu kompilieren?

21
Drake

Ich habe eine Problemumgehung für dieses Problem gefunden. Dies könnte ein Problem von Visual Studio 11 Beta sein, das vor der offiziellen Veröffentlichung behoben wird. 

Wenn Sie interessiert sind, setzen Sie einfach die Umgebungsvariable "VisualStudioVersion" auf "11.0", bevor Sie MSBuild.exe aufrufen.

In Batchdateien

set VisualStudioVersion=11.0

oder in VB.NET

Environment.SetEnvironmentVariable("VisualStudioVersion", "11.0")
9
Drake

Ich bin auch mit der vollständigen Version von VS 2012 auf dasselbe Problem gestoßen. Sie können die VisualStudioVersion auch als Eigenschaft mit MSBuild festlegen, anstatt mit Umgebungsvariablen zu arbeiten, wie in der akzeptierten Antwort erwähnt. Zum Beispiel:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe .\myproject.vcxproj /p:VisualStudioVersion=11.0

Der Ansatz der Umgebungsvariablen Ich bin sicher, dass die Arbeit genauso gut funktioniert. Ich habe es ehrlich gesagt nicht versucht, da ich versuchte, die Umgebungsvariablen nicht ändern zu müssen.

25
Spencer

Stellen Sie sicher, dass der Anfang Ihrer .SLN-Datei folgendermaßen aussieht:

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012

Wenn Sie auf die Lösungsdatei doppelklicken, bestimmt # Visual Studio 2012, welche Version von Visual Studio geladen ist (und steuert das in Windows Explorer angezeigte Symbol).

Wenn Sie jedoch MSBuild ausführen, betrachtet it den Format Version 12.00-Teil.

Verwirrt?

Dies ist verwirrend, da Visual Studio 2010 Version 10.0 und Visual Studio 2012 Version 11.0 (nicht 12.0) ist. Durch das Lösungsdateiformat der Version 12.0 wird MSBuild (implizit) festgelegt, VisualStudioVersion auf 11.0 zu setzen.

12
Roger Lipscombe

Ab Visual Studio 2013 ist MSBuild nun Teil von Visual Studio. Der korrekte Pfad sollte $ (MSBuildToolsPath) („C:\Programme (x86)\MSBuild\12.0\Bin“) sein. Wenn Sie msbuild.exe aus dem .Net Framework-Ordner („C:\Windows\Microsoft.NET\Framework64\v4.0.30319“) verwenden, kann die Versionen vs2012 und vs2013 nicht unterschieden werden.

3
ThieuND

Verwenden Sie dazu die menübasierten Optionen. Von VC++ 2010 Express aus: - Klicken Sie mit der rechten Maustaste auf die Hauptdatei des Projekts (nicht die Lösung selbst ganz oben in der Baumstruktur) .- Klicken Sie im Hauptfenster auf Allgemein .- Find Platform Toolset rechte Seite des Dialogs, obere Hälfte .- Änderung von v110 in v100 .- Klicken Sie auf OK.

----- Erledigt ------

1
DaveT

Microsoft bietet eine Batchdatei zum Festlegen aller EnvVars Sie finden sie im Startmenü unter "Microsoft Visual Studio 2012/Visual Studio-Tools" oder im Ordner "Visual Studio" ("C:\Programme (x86)\Microsoft Visual" Studio 11.0\Common7\Tools\VsDevCmd.bat ")

0
Thomas Trotzki