.vcxproj
Dateien und Wildcards
Die Visual Studio-IDE unterstützt bestimmte Konstrukte in Projektelementen in .vcxproj
Dateien nicht. Diese nicht unterstützten Konstrukte umfassen Wildcards, durch Semikolons getrennte Listen oder MSBuild-Makros, die auf mehrere Dateien erweitert werden. Das .vcxproj
Projektsystem für C++-Builds ist restriktiver als MSBuild. Jedes Projektelement muss über ein eigenes MSBuild-Element verfügen. Weitere Informationen zum .vcxproj
Dateiformat finden Sie unter .vcxproj
und .props
Dateistruktur.
Diese Konstruktbeispiele werden von der IDE nicht unterstützt:
<ItemGroup>
<None Include="*.txt">
<ClCompile Include="a.cpp;b.cpp"/>
<ClCompile Include="@(SomeItems)" />
</ItemGroup>
Wenn eine .vcxproj
Projektdatei, die diese Konstrukte enthält, in die IDE geladen wird, funktioniert das Projekt möglicherweise zuerst. Probleme werden jedoch wahrscheinlich, sobald das Projekt von Visual Studio geändert und dann auf dem Datenträger gespeichert wird. Es können zufällige Abstürze und nicht definiertes Verhalten auftreten.
In Visual Studio 2019, Version 16.7, erkennt Visual Studio beim Laden einer .vcxproj
Projektdatei automatisch nicht unterstützte Einträge in Projektelementen. Während des Ladens der Lösung werden Warnungen im Ausgabefenster angezeigt.
Visual Studio 2019, Version 16.7, fügt auch schreibgeschützte Projektunterstützung hinzu. Die schreibgeschützte Unterstützung ermöglicht es der IDE, manuell erstellte Projekte zu verwenden, die nicht über die zusätzlichen Einschränkungen von bearbeitbaren IDE-Projekten verfügen.
Wenn Sie über eine .vcxproj
Datei verfügen, die mindestens eins der nicht unterstützten Konstrukte verwendet, können Sie sie ohne Warnungen in der IDE laden, indem Sie eine der folgenden Optionen verwenden:
- Alle Elemente explizit auflisten
- Markieren Des Projekts als schreibgeschützt
- Verschieben von Wildcardelementen in einen Zieltext
Alle Elemente explizit auflisten
Derzeit gibt es keine Möglichkeit, im fenster Projektmappen-Explorer in einem nicht schreibgeschützten Projekt Wildcarderweiterungselemente sichtbar zu machen. Projektmappen-Explorer erwartet, dass Projekte alle Elemente explizit auflisten.
.vcxproj
Um Projekte in Visual Studio 2019, Version 16.7 oder höher, automatisch zu erweitern, legen Sie die ReplaceWildcardsInProjectItems
Eigenschaft auf true
. Es wird empfohlen, eine Directory.Build.props
Datei in einem Stammverzeichnis zu erstellen und diesen Inhalt zu verwenden:
<Project>
<PropertyGroup>
<ReplaceWildcardsInProjectItems>true</ReplaceWildcardsInProjectItems>
</PropertyGroup>
</Project>
Markieren Des Projekts als schreibgeschützt
In Visual Studio 2019, Version 16.7 und höher, können Sie Projekte als schreibgeschützt markieren. Um ihr Projekt schreibgeschützt zu markieren, fügen Sie der Datei die folgende Eigenschaft .vcxproj
oder eine der importierten Dateien hinzu:
<PropertyGroup>
<ReadOnlyProject>true</ReadOnlyProject>
</PropertyGroup>
Die <ReadOnlyProject>
Einstellung verhindert, dass Visual Studio das Projekt bearbeitet und speichert, sodass Sie alle MSBuild-Konstrukte darin verwenden können, einschließlich Wildcards.
Es ist wichtig zu wissen, dass der Projektcache nicht verfügbar ist, wenn Visual Studio Wildcards in Projektelementen in der .vcxproj
Datei oder einem seiner Importe erkennt. Die Ladezeiten der Lösung in der IDE sind viel länger, wenn Viele Projekte mit Wildcards verwendet werden.
Verschieben von Wildcardelementen in einen Zieltext
Möglicherweise möchten Sie Mithilfe von Wildcards Ressourcen sammeln, generierte Quellen hinzufügen usw. Wenn Sie sie nicht im fenster Projektmappen-Explorer aufgeführt haben, können Sie stattdessen dieses Verfahren verwenden:
Ändern Sie den Namen der Elementgruppe, um Wildcards hinzuzufügen. Beispiel:
<Image Include="*.bmp" /> <ClCompile Include="*.cpp" />
ändern Sie sie in:
<_WildCardImage Include="*.bmp" /> <_WildCardClCompile Include="*.cpp" />
Fügen Sie diese Inhalte zu Ihrer
.vcxproj
Datei hinzu. Oder fügen Sie sie einerDirectory.Build.targets
Datei in einem Stammverzeichnis hinzu, um alle Projekte unter diesem Stamm zu beeinflussen:<Target Name="AddWildCardItems" AfterTargets="BuildGenerateSources"> <ItemGroup> <Image Include="@(_WildCardImage)" /> <ClCompile Include="@(_WildCardClCompile)" /> </ItemGroup> </Target>
Diese Änderung macht den Build so, dass die Elemente angezeigt werden, die in der
.vcxproj
Datei definiert sind. Jetzt sind sie jedoch im Projektmappen-Explorer-Fenster nicht sichtbar, und sie verursachen keine Probleme in der IDE.Wenn Sie beim Öffnen dieser Dateien im Editor die richtigen IntelliSense-Elemente
_WildCardClCompile
anzeigen möchten, fügen Sie den folgenden Inhalt hinzu:<PropertyGroup> <ComputeCompileInputsTargets> AddWildCardItems $(ComputeCompileInputsTargets) </ComputeCompileInputsTargets> </PropertyGroup>
Effektiv können Sie Platzhalter für alle Elemente innerhalb eines Zieltexts verwenden. Sie können auch Wildcards in einem ItemGroup
Element verwenden, das nicht als Projektelement durch ein ProjectSchemaDefinition
.
Hinweis
Wenn Sie Die Wildcard-Elemente aus einer .vcxproj
Datei in eine importierte Datei verschieben, werden sie im fenster Projektmappen-Explorer nicht angezeigt. Durch diese Änderung kann Ihr Projekt auch ohne Änderung in der IDE geladen werden. Dieser Ansatz wird jedoch nicht empfohlen, da er den Projektcache deaktiviert.
Siehe auch
Festlegen der Compiler- und Buildeigenschaften (C++) in Visual Studio
Eigenschaftenseite: XML-Dateien