.vcxproj
pliki i symbole wieloznaczne
Środowisko IDE programu Visual Studio nie obsługuje niektórych konstrukcji w elementach projektu w .vcxproj
plikach. Te nieobsługiwane konstrukcje obejmują symbole wieloznaczne, listy rozdzielane średnikami lub makra MSBuild, które rozszerzają się na wiele plików. System .vcxproj
projektu dla kompilacji języka C++ jest bardziej restrykcyjny niż MSBuild. Każdy element projektu jest wymagany do posiadania własnego elementu MSBuild. Aby uzyskać więcej informacji na .vcxproj
temat formatu pliku, zobacz .vcxproj
i .props
struktura plików.
Te przykłady konstrukcji nie są obsługiwane przez środowisko IDE:
<ItemGroup>
<None Include="*.txt">
<ClCompile Include="a.cpp;b.cpp"/>
<ClCompile Include="@(SomeItems)" />
</ItemGroup>
.vcxproj
Jeśli plik projektu zawierający te konstrukcje zostanie załadowany w środowisku IDE, projekt może wydawać się działać na początku. Jednak problemy są prawdopodobne, gdy tylko projekt zostanie zmodyfikowany przez program Visual Studio, a następnie zapisany na dysku. Mogą wystąpić losowe awarie i niezdefiniowane zachowanie.
W programie Visual Studio 2019 w wersji 16.7, gdy program Visual Studio ładuje .vcxproj
plik projektu, automatycznie wykrywa nieobsługiwane wpisy w elementach projektu. Ostrzeżenia zostaną wyświetlone w oknie Dane wyjściowe podczas ładowania rozwiązania.
Program Visual Studio 2019 w wersji 16.7 dodaje również obsługę projektów tylko do odczytu. Obsługa tylko do odczytu umożliwia środowisku IDE używanie ręcznie utworzonych projektów, które nie mają dodatkowych ograniczeń projektów edytowalnych w środowisku IDE.
Jeśli masz .vcxproj
plik, który używa co najmniej jednej nieobsługiwanej konstrukcji, możesz go załadować bez ostrzeżeń w środowisku IDE przy użyciu jednej z następujących opcji:
- Jawne wyświetlanie listy wszystkich elementów
- Oznaczanie projektu jako tylko do odczytu
- Przenoszenie elementów z symbolami wieloznacznymi do treści docelowej
Obecnie nie ma możliwości uwidoczninia elementów rozszerzeń symboli wieloznacznych w oknie Eksplorator rozwiązań w projekcie nie tylko do odczytu. Eksplorator rozwiązań oczekuje, że projekty będą jawnie wyświetlać listę wszystkich elementów.
Aby projekty .vcxproj
automatycznie rozszerzały symbole wieloznaczne w programie Visual Studio 2019 w wersji 16.7 lub nowszej ReplaceWildcardsInProjectItems
, ustaw właściwość na true
. Zalecamy utworzenie Directory.Build.props
pliku w katalogu głównym i użycie tej zawartości:
<Project>
<PropertyGroup>
<ReplaceWildcardsInProjectItems>true</ReplaceWildcardsInProjectItems>
</PropertyGroup>
</Project>
W programie Visual Studio 2019 w wersji 16.7 lub nowszej można oznaczyć projekty jako tylko do odczytu. Aby oznaczyć projekt tylko do odczytu, dodaj następującą właściwość do .vcxproj
pliku lub do dowolnego importowanych plików:
<PropertyGroup>
<ReadOnlyProject>true</ReadOnlyProject>
</PropertyGroup>
To <ReadOnlyProject>
ustawienie uniemożliwia programowi Visual Studio edytowanie i zapisywanie projektu, dzięki czemu można używać w nim dowolnych konstrukcji MSBuild, w tym symboli wieloznacznych.
Należy pamiętać, że pamięć podręczna projektu nie jest dostępna, jeśli program Visual Studio wykryje symbole wieloznaczne w elementach projektu w .vcxproj
pliku lub którykolwiek z jego importów. Czas ładowania rozwiązań w środowisku IDE jest znacznie dłuższy, jeśli masz wiele projektów korzystających z symboli wieloznacznych.
Możesz użyć symboli wieloznacznych do zbierania zasobów, dodawania wygenerowanych źródeł itd. Jeśli nie potrzebujesz ich na liście w oknie Eksplorator rozwiązań, możesz użyć tej procedury:
Zmień nazwę grupy elementów, aby dodać symbole wieloznaczne. Na przykład zamiast:
<Image Include="*.bmp" /> <ClCompile Include="*.cpp" />
zmień ją na:
<_WildCardImage Include="*.bmp" /> <_WildCardClCompile Include="*.cpp" />
Dodaj tę zawartość do
.vcxproj
pliku. Możesz też dodać go doDirectory.Build.targets
pliku w katalogu głównym, aby wpłynąć na wszystkie projekty w tym katalogu głównym:<Target Name="AddWildCardItems" AfterTargets="BuildGenerateSources"> <ItemGroup> <Image Include="@(_WildCardImage)" /> <ClCompile Include="@(_WildCardClCompile)" /> </ItemGroup> </Target>
Ta zmiana powoduje, że kompilacja będzie widzieć elementy zdefiniowane w
.vcxproj
pliku. Jednak teraz nie są one widoczne w oknie Eksplorator rozwiązań i nie spowodują problemów w środowisku IDE.Aby wyświetlić poprawną funkcję IntelliSense dla
_WildCardClCompile
elementów podczas otwierania tych plików w edytorze, dodaj następującą zawartość:<PropertyGroup> <ComputeCompileInputsTargets> AddWildCardItems $(ComputeCompileInputsTargets) </ComputeCompileInputsTargets> </PropertyGroup>
W rzeczywistości można używać symboli wieloznacznych dla dowolnych elementów wewnątrz treści docelowej. Można również użyć symboli wieloznacznych w obiekcie ItemGroup
, który nie jest zdefiniowany jako element projektu przez ProjectSchemaDefinition
element .
Uwaga
Jeśli przeniesiesz symbol wieloznaczny z .vcxproj
pliku do zaimportowanego pliku, nie będą one widoczne w oknie Eksplorator rozwiązań. Ta zmiana umożliwia również ładowanie projektu w środowisku IDE bez modyfikacji. Nie zalecamy jednak tego podejścia, ponieważ wyłącza pamięć podręczną projektu.
Ustawianie właściwości kompilacji i kompilatora języka C++ w programie Visual Studio
Pliki XML strony właściwości