.vcxproj file e caratteri jolly

L'IDE di Visual Studio non supporta determinati costrutti negli elementi del progetto nei .vcxproj file. Questi costrutti non supportati includono caratteri jolly, elenchi delimitati da punti e virgola o macro MSBuild che si espandono a più file. Il .vcxproj sistema di progetto per le compilazioni C++ è più restrittivo di MSBuild. Ogni elemento di progetto deve avere un proprio elemento MSBuild. Per altre informazioni sul formato di .vcxproj file, vedere .vcxproj e .props struttura di file.

Questi esempi di costrutto non sono supportati dall'IDE:

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

Se un .vcxproj file di progetto che include questi costrutti viene caricato nell'IDE, il progetto potrebbe sembrare funzionare inizialmente. Tuttavia, è probabile che i problemi vengano visualizzati non appena il progetto viene modificato da Visual Studio e quindi salvato su disco. È possibile che si verifichino arresti anomali casuali e comportamento non definito.

In Visual Studio 2019 versione 16.7, quando Visual Studio carica un .vcxproj file di progetto, rileva automaticamente le voci non supportate negli elementi del progetto. Durante il caricamento della soluzione verranno visualizzati avvisi nella finestra Output.

Visual Studio 2019 versione 16.7 aggiunge anche il supporto del progetto di sola lettura. Il supporto di sola lettura consente all'IDE di usare progetti creati manualmente che non presentano le limitazioni aggiuntive dei progetti modificabili dall'IDE.

Se si dispone di un .vcxproj file che usa uno o più costrutti non supportati, è possibile caricarlo senza avvisi nell'IDE usando una di queste opzioni:

  • Elencare tutti gli elementi in modo esplicito
  • Contrassegnare il progetto come di sola lettura
  • Spostare gli elementi con caratteri jolly in un corpo di destinazione

Elencare tutti gli elementi in modo esplicito

Attualmente, non è possibile rendere visibili gli elementi di espansione con caratteri jolly nella finestra di Esplora soluzioni in un progetto non di sola lettura. Esplora soluzioni prevede che i progetti elenchino tutti gli elementi in modo esplicito.

Per rendere .vcxproj i progetti espandere automaticamente i caratteri jolly in Visual Studio 2019 versione 16.7 o successiva, impostare la ReplaceWildcardsInProjectItems proprietà su true. È consigliabile creare un Directory.Build.props file in una directory radice e usare questo contenuto:

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

Contrassegnare il progetto come di sola lettura

In Visual Studio 2019 versione 16.7 e successive è possibile contrassegnare i progetti come di sola lettura. Per contrassegnare il progetto di sola lettura, aggiungere la proprietà seguente al .vcxproj file o a uno qualsiasi dei file importati:

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

L'impostazione <ReadOnlyProject> impedisce a Visual Studio di modificare e salvare il progetto, in modo da poter usare tutti i costrutti di MSBuild, inclusi i caratteri jolly.

È importante sapere che la cache del progetto non è disponibile se Visual Studio rileva caratteri jolly negli elementi del progetto nel .vcxproj file o in una delle relative importazioni. I tempi di caricamento delle soluzioni nell'IDE sono molto più lunghi se sono presenti molti progetti che usano caratteri jolly.

Spostare gli elementi con caratteri jolly in un corpo di destinazione

È possibile usare caratteri jolly per raccogliere risorse, aggiungere origini generate e così via. Se non sono necessarie elencate nella finestra di Esplora soluzioni, è possibile usare invece questa procedura:

  1. Modificare il nome del gruppo di elementi per aggiungere caratteri jolly. Ad esempio, anziché:

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

    modificarlo in:

    <_WildCardImage Include="*.bmp" />
    <_WildCardClCompile Include="*.cpp" />
    
  2. Aggiungere questo contenuto al .vcxproj file. In alternativa, aggiungerlo a un Directory.Build.targets file in una directory radice per influire su tutti i progetti nella radice:

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

    Questa modifica rende la compilazione visualizzare gli elementi come definiti nel .vcxproj file. Tuttavia, ora non sono visibili nella finestra di Esplora soluzioni e non causeranno problemi nell'IDE.

  3. Per visualizzare IntelliSense corretto per _WildCardClCompile gli elementi quando si aprono tali file nell'editor, aggiungere il contenuto seguente:

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

In effetti, è possibile usare caratteri jolly per qualsiasi elemento all'interno di un corpo di destinazione. È anche possibile usare caratteri jolly in un oggetto ItemGroup non definito come elemento di progetto da un oggetto ProjectSchemaDefinition.

Nota

Se si sposta il carattere jolly da un file a un .vcxproj file importato, non saranno visibili nella finestra di Esplora soluzioni. Questa modifica consente anche al progetto di caricare nell'IDE senza modifiche. Tuttavia, non è consigliabile questo approccio, perché disabilita la cache del progetto.

Vedi anche

Impostare le proprietà del compilatore e di compilazione C++ in Visual Studio
File XML delle pagine delle proprietà