Share via


.vcxprojDateien und Wild Karte

Die Visual Studio-IDE unterstützt bestimmte Konstrukte in Projektelementen in .vcxproj Dateien nicht. Diese nicht unterstützten Konstrukte umfassen Wild Karte s, semikolonstrennte 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 Elementen in einen Zieltext Karte

Alle Elemente explizit auflisten

Derzeit gibt es keine Möglichkeit Karte Erweiterungselemente im fenster Projektmappen-Explorer in einem nicht schreibgeschützten Projekt sichtbar zu machen. Projektmappen-Explorer erwartet, dass Projekte alle Elemente explizit auflisten.

.vcxproj Wenn Projekte in Visual Studio 2019, Version 16.7 oder höher, automatisch erweitert werden Karte sollen, 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 wilder Karte s.

Es ist wichtig zu wissen, dass der Projektcache nicht verfügbar ist, wenn Visual Studio wild Karte s in Projektelementen in der .vcxproj Datei oder einem seiner Importe erkennt. Die Ladezeiten der Lösung in der IDE sind viel länger, wenn sie viele Projekte verwenden, die wild Karte verwenden.

Verschieben von Elementen in einen Zieltext Karte

Möglicherweise möchten Sie wild Karte verwenden, um Ressourcen zu sammeln, generierte Quellen hinzuzufü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 "wild" hinzuzufügen Karte. 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 Karte für alle Elemente innerhalb eines Zieltexts verwenden. Sie können auch Wild Karte s in einem ItemGroup Element verwenden, das nicht als Projektelement durch ein ProjectSchemaDefinition.

Hinweis

Wenn Sie "wild" verschieben Karte aus einer .vcxproj Datei in eine importierte Datei eingeschlossen wird, werden sie im Projektmappen-Explorer-Fenster 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