Udostępnij za pośrednictwem


.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

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:

  1. 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" />
    
  2. Dodaj tę zawartość do .vcxproj pliku. Możesz też dodać go do Directory.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.

  3. 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 ProjectSchemaDefinitionelement .

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