VCBuild im Vergleich zu MSBuild: Erstellen von Systemänderungen in Visual Studio 2010

Das MSBuild-System für C++-Projekte wurde in Visual Studio 2010 eingeführt. In Visual Studio 2008 und früheren Versionen wurde das VCBuild-System verwendet. Bestimmte Dateitypen und Konzepte, die von VCBuild abhängig sind, sind entweder nicht vorhanden oder werden in MSBuild anders dargestellt. In diesem Artikel werden die Unterschiede im aktuellen Buildsystem behandelt. Um ein Visual Studio 2008-Projekt in MSBuild zu konvertieren, müssen Sie Visual Studio 2010 verwenden. Nachdem das Projekt konvertiert wurde, sollten Sie die neueste Version von Visual Studio verwenden, um ein Upgrade auf das aktuelle IDE- und Compilertoolset durchzuführen. Weitere Informationen, einschließlich des Abrufens von Visual Studio 2010, finden Sie in den Anweisungen für Visual Studio 2008.

In den folgenden Abschnitten werden die Änderungen von VCBuild zu MSBuild zusammengefasst. Wenn Ihr VCBuild-Projekt benutzerdefinierte Buildregeln oder Makros enthält, die von MSBuild nicht erkannt werden, lesen Sie Visual Studio-Projekte – C++ , um zu erfahren, wie Sie diese Anweisungen in das MSBuild-System übersetzen. Die erste Konvertierung von VCBuild zu MSBuild ist nur ein Zwischenschritt. Es ist nicht erforderlich, die Projektdatei vollständig zu korrigieren oder das Programm ohne Fehler zu kompilieren. Sie verwenden Visual Studio 2010 nur zum Konvertieren des Projekts in das MSBuild-Format, damit das Projekt in der neuesten Version von Visual Studio funktioniert.

VCPROJ ist nun VCXPROJ

Projektdateien verwenden nicht mehr die VCPROJ-Erweiterung. Visual Studio 2010 konvertiert automatisch Projektdateien, die von einer früheren Version von Visual C++ erstellt wurden, in das MSBuild-Format, das die Vcxproj-Erweiterung für Projektdateien verwendet.

VSPROPS ist nun PROPS

In Visual Studio 2008 und früheren Versionen ist ein Projekteigenschaftenblatt eine XML-basierte Datei mit der Dateinamenerweiterung .vsprops. Mit einem Projekteigenschaftenblatt können Sie Parameter für Buildtools festlegen, z. B. Compiler oder Linker, und benutzerdefinierte Makros erstellen. In MSBuild ist die Dateinamenerweiterung für ein Projekteigenschaftsblatt PROPS.

Benutzerdefinierte Buildregeln und RULES-Dateien

In Visual Studio 2008 und früheren Versionen ist eine Regeldatei eine XML-basierte Datei mit der Dateinamenerweiterung .rules. Mit Regeldateien können Sie benutzerdefinierte Buildregeln definieren und diese in den Buildvorgang eines C++-Projekts in Visual Studio integrieren. Mit benutzerdefinierten Buildregeln, die mehreren Erweiterungen zugeordnet sein können, können Sie Eingabedateien an ein Tool übergeben, das mindestens eine Ausgabedatei erstellt.

Im MSBuild-System werden benutzerdefinierte Buildregeln durch drei Dateitypen, XML, .props und .targets anstelle einer REGELdatei dargestellt. Wenn eine Regeldatei, die mit einer früheren Version von Visual C++ erstellt wurde, zu Visual Studio 2010 migriert wird, werden entsprechende XML-, .props- und .targets-Dateien zusammen mit der ursprünglichen REGELdatei in Ihrem Projekt erstellt und gespeichert.

Wichtig

In Visual Studio 2010 unterstützt die IDE die Erstellung neuer Regeln nicht. Aus diesem Grund besteht die einfachste Möglichkeit zum Verwenden einer Regeldatei aus einem Projekt, das mit einer früheren Version von Visual C++ erstellt wurde, darin, das Projekt zu Visual Studio 2010 zu migrieren.

Vererbungsmakros

In Visual Studio 2008 und früheren Versionen gibt das Makro $(Inherit) die Reihenfolge an, in der geerbte Eigenschaften in der Befehlszeile angezeigt werden, die vom Projektbuildsystem erstellt wird. Mit dem Makro $(NoInherit) werden alle Vorkommnisse von „$(Inherit)“ ignoriert und Eigenschaften, die andernfalls geerbt werden würden, werden nicht geerbt. Durch das Makro „$(Inherit)“ werden beispielsweise Dateien, die mithilfe der Compileroption /I (Additional Include Directories) (/I (Zusätzliche Includeverzeichnisse)) festgelegt werden, an die Befehlszeile angefügt.

In Visual Studio 2010 wird die Vererbung unterstützt, indem der Wert einer Eigenschaft als Verkettung eines oder mehrerer Literalwerte und Eigenschaftsmakros angegeben wird. Die Makros $(Inherit) und $(NoInherit) werden nicht unterstützt.

Im folgenden Beispiel wird einer Eigenschaft auf einer Eigenschaftenseite eine durch Semikolons getrennte Liste zugewiesen. Die Liste besteht aus der Verkettung des <Wertliterals> und des Werts der MyProperty Eigenschaft, auf die mithilfe der Makronotation "$(MyProperty)" zugegriffen wird.

Property=<value>;$(MyProperty)

.vcxproj.user-Dateien

Benutzerdateien (VCXPROJ.USER) speichern benutzerspezifische Eigenschaften, z. B. Debug- und Bereitstellungseinstellungen. Die Datei vcxproj.user gilt für alle Projekte für einen bestimmten Benutzer.

.vcxproj.filters-Datei

Wenn Projektmappen-Explorer zum Hinzufügen einer Datei zu einem Projekt verwendet wird, definiert die Filterdatei (VCXPROJ.filters), wo in der Projektmappen-Explorer Strukturansicht die Datei basierend auf der Dateinamenerweiterung hinzugefügt wird.

VC++-Verzeichniseinstellungen

Die Einstellungen von Visual C++-Verzeichnissen werden auf der Eigenschaftenseite für VC++-Verzeichnisse festgelegt. In Visual Studio 2008 und früheren Versionen gelten die Verzeichniseinstellungen pro Benutzer, und die Liste der ausgeschlossenen Verzeichnisse wird in der Datei sysincl.dat angegeben.

Sie können die VC++-Verzeichniseinstellungen nicht ändern, wenn Sie devenv /resetsettings in der Befehlszeile ausführen. Außerdem können Sie die Einstellungen nicht ändern, indem Sie das Menü Extras öffnen, auf Einstellungen importieren/exportieren klicken und dann die Option Alle Einstellungen zurücksetzen auswählen.

So migrieren Sie VC++-Verzeichnisse aus einer VSSETTINGS-Datei , die von einer früheren Version von Visual Studio erstellt wurde:

  1. Öffnen des Menüs "Extras" auf "Importieren und Exportieren" Einstellungen
  2. Ausgewählte Umgebungseinstellungen importieren auswählen
  3. Folgen Sie den Anweisungen im Assistenten.

Siehe auch

MSBuild on the Command Line – C++ (C++: MSBuild in der Befehlszeile)