Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ś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
Jawne wyświetlanie listy wszystkich elementów
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>
Oznaczanie projektu jako tylko do odczytu
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.
Przenoszenie elementów z symbolami wieloznacznymi do treści docelowej
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.
Zobacz też
Ustawianie właściwości kompilacji i kompilatora języka C++ w programie Visual Studio
Pliki XML strony właściwości