Freigeben über


.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:

  1. Ä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" />
    
  2. Fügen Sie diese Inhalte zu Ihrer .vcxproj Datei hinzu. Oder fügen Sie sie einer Directory.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.

  3. 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