.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:
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" />
Přidejte tento obsah do
.vcxproj
souboru. Nebo ho přidejte doDirectory.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).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í