Sdílet prostřednictvím


.vcxproj soubory a zástupné cardy

Integrované vývojové prostředí sady Visual Studio nepodporuje určité konstrukce v položkách projektu v .vcxproj souborech. Mezi tyto nepodporované konstrukce patří zástupné znamény, částečně oddělené seznamy nebo makra NÁSTROJE MSBuild, která se rozšiřují na více souborů. Systém .vcxproj projektů pro sestavení jazyka C++ je více omezující než nástroj MSBuild. Každá položka projektu musí mít vlastní položku NÁSTROJE MSBuild. Další informace o .vcxproj formátu souboru najdete v tématu .vcxproj a .props struktuře souborů.

Integrované vývojové prostředí (IDE) nepodporuje tyto příklady konstruktorů:

<ItemGroup>
  <None Include="*.txt">
  <ClCompile Include="a.cpp;b.cpp"/>
  <ClCompile Include="@(SomeItems)" />
</ItemGroup>

Pokud se do integrovaného .vcxproj vývojového prostředí načte soubor projektu, který obsahuje tyto konstruktory, může se zdát, že projekt funguje jako první. Problémy však pravděpodobně po úpravě projektu sadou Visual Studio a uložení na disk. Může docházet k náhodným chybám a nedefinovaným chováním.

Když Visual Studio 2019 verze 16.7 načte .vcxproj soubor projektu, automaticky rozpozná nepodporované položky v položkách projektu. Během načítání řešení se v okně Výstup zobrazí upozornění.

Visual Studio 2019 verze 16.7 také přidává podporu projektu jen pro čtení. Podpora jen pro čtení umožňuje integrované vývojové prostředí (IDE) používat ručně vytvořené projekty, které nemají další omezení projektů s možností úprav integrovaného vývojového prostředí (IDE).

Pokud máte .vcxproj soubor, který používá jeden nebo více nepodporovaných konstruktorů, můžete ho v integrovaném vývojovém prostředí (IDE) načíst bez upozornění pomocí jedné z těchto možností:

  • Explicitní výpis všech položek
  • Označení projektu jako jen pro čtení
  • Přesunutí položek se zástupným znakem do cílového textu

Explicitní výpis všech položek

V současné době neexistuje způsob, jak v okně Průzkumník řešení v projektu, který není určen jen pro čtení, zobrazit položky rozšíření zástupných znaků. Průzkumník řešení očekává, že projekty explicitně vypíše všechny položky.

Pokud chcete, aby .vcxproj projekty automaticky rozbalily zástupné cardy v sadě Visual Studio 2019 verze 16.7 nebo novější, nastavte ReplaceWildcardsInProjectItems vlastnost na true. Doporučujeme vytvořit Directory.Build.props soubor v kořenovém adresáři a použít tento obsah:

<Project>
  <PropertyGroup>
    <ReplaceWildcardsInProjectItems>true</ReplaceWildcardsInProjectItems>
  </PropertyGroup>
</Project>

Označení projektu jako jen pro čtení

V sadě Visual Studio 2019 verze 16.7 a novější můžete projekty označit jako jen pro čtení. Pokud chcete projekt označit jen pro čtení, přidejte do .vcxproj souboru nebo do některého ze souborů, které importuje, následující vlastnost:

<PropertyGroup>
    <ReadOnlyProject>true</ReadOnlyProject>
</PropertyGroup>

Toto <ReadOnlyProject> nastavení zabrání sadě Visual Studio v úpravách a uložení projektu, takže můžete použít jakékoli konstruktory NÁSTROJE MSBuild, včetně zástupných znaků.

Je důležité vědět, že mezipaměť projektu není dostupná, pokud Visual Studio zjistí zástupné znamény v položkách projektu v .vcxproj souboru nebo některém z jeho importů. Doby načítání řešení v integrovaném vývojovém prostředí (IDE) jsou mnohem delší, pokud máte velké množství projektů, které používají zástupné cardy.

Přesunutí položek se zástupným znakem do cílového textu

K shromáždění prostředků, přidání vygenerovaných zdrojů atd. můžete použít zástupné cardy. Pokud je nepotřebujete uvedené v okně Průzkumník řešení, můžete místo toho použít tento postup:

  1. Změňte název skupiny položek a přidejte zástupné cardy. Například místo:

    <Image Include="*.bmp" />
    <ClCompile Include="*.cpp" />
    

    změňte ho na:

    <_WildCardImage Include="*.bmp" />
    <_WildCardClCompile Include="*.cpp" />
    
  2. Přidejte tento obsah do .vcxproj souboru. Nebo ho přidejte do Directory.Build.targets souboru v kořenovém adresáři, abyste ovlivnili všechny projekty v daném kořenovém adresáři:

    <Target Name="AddWildCardItems"
        AfterTargets="BuildGenerateSources">
      <ItemGroup>
        <Image Include="@(_WildCardImage)" />
        <ClCompile Include="@(_WildCardClCompile)" />
      </ItemGroup>
    </Target>
    

    Díky této změně uvidí sestavení položky, které jsou v .vcxproj souboru definované. Teď ale nejsou viditelné v okně Průzkumník řešení a nezpůsobí problémy v integrovaném vývojovém prostředí (IDE).

  3. Pokud chcete při otevření těchto souborů v editoru zobrazit správnou technologii IntelliSense pro _WildCardClCompile položky, přidejte následující obsah:

    <PropertyGroup>
      <ComputeCompileInputsTargets>
        AddWildCardItems
        $(ComputeCompileInputsTargets)
      </ComputeCompileInputsTargets>
    </PropertyGroup>
    

V podstatě můžete použít zástupné cardy pro všechny položky uvnitř cílového textu. Můžete také použít zástupné cardy v objektu ItemGroup , který není definován jako položka projektu pomocí objektu ProjectSchemaDefinition.

Poznámka

Pokud přesunete zástupný znak ze .vcxproj souboru do importovaného souboru, nezobrazí se v okně Průzkumník řešení. Tato změna také umožňuje, aby se projekt načetl v integrovaném vývojovém prostředí (IDE) beze změny. Tento přístup ale nedoporučujeme, protože zakáže mezipaměť projektu.

Viz také

Nastavení vlastností kompilátoru a sestavení C++ v sadě Visual Studio
Soubory XML stránky vlastností