Ereditarietà delle proprietà nei progetti di Visual Studio

Il sistema di progetto nativo di Visual Studio si basa su MSBuild. MSBuild definisce i formati di file e le regole per la compilazione di progetti di qualsiasi tipo. Gestisce la maggior parte della complessità della compilazione per più configurazioni e piattaforme. È utile capire come funziona. Questo aspetto è particolarmente importante se si vogliono definire configurazioni personalizzate. In alternativa, per creare set riutilizzabili di proprietà che è possibile condividere e importare in più progetti.

File con estensione vcxproj, props e targets

Le proprietà del progetto vengono archiviate in diversi file. Alcuni vengono archiviati direttamente nel file di .vcxproj progetto. Altri provengono da altri .targets file o .props importati dal file di progetto e che forniscono valori predefiniti. I file di progetto di Visual Studio 2015 sono disponibili in una cartella specifica delle impostazioni locali nella directory di base . %ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\v140

Le proprietà del progetto vengono archiviate in diversi file. Alcuni vengono archiviati direttamente nel file di .vcxproj progetto. Altri provengono da altri .targets file o .props importati dal file di progetto e che forniscono valori predefiniti. I file di progetto di Visual Studio 2017 sono disponibili in una cartella specifica delle impostazioni locali nella directory di base . %VSINSTALLDIR%Common7\IDE\VC\VCTargets\

Le proprietà del progetto vengono archiviate in diversi file. Alcuni vengono archiviati direttamente nel file di .vcxproj progetto. Altri provengono da altri .targets file o .props importati dal file di progetto e che forniscono valori predefiniti. I file di progetto di Visual Studio sono disponibili in una cartella specifica delle impostazioni locali nella directory di base . %VSINSTALLDIR%\MSBuild\Microsoft\VC\<version> <version> è specifico della versione di Visual Studio. v160 È per Visual Studio 2019.

Le proprietà vengono archiviate anche in tutti i file personalizzati .props che è possibile aggiungere al proprio progetto. È consigliabile NON modificare manualmente tali file. Usare invece le pagine delle proprietà nell'IDE per modificare tutte le proprietà, in particolare quelle che partecipano all'ereditarietà, a meno che non si abbia una conoscenza approfondita di MSBuild e .vcxproj dei file.

Come illustrato in precedenza, la stessa proprietà per la stessa configurazione può essere assegnata a un valore diverso in file diversi. Quando si compila un progetto, il motore MSBuild valuta il file di progetto e tutti i file importati in un ordine ben definito descritto più avanti. Man mano che viene valutato ogni singolo file, i valori di proprietà definiti in quel file sostituiranno i valori esistenti. Tutti i valori non specificati vengono ereditati dai file valutati in precedenza. Quando si imposta una proprietà con pagine delle proprietà, è anche importante prestare attenzione alla posizione in cui è impostata. Se si imposta una proprietà su "X" in un .props file, ma la proprietà è impostata su "Y" nel file di progetto, il progetto verrà compilato con la proprietà impostata su "Y". Se la stessa proprietà è impostata su "Z" in un elemento di progetto, ad esempio un .cpp file, il motore MSBuild userà il valore "Z".

Di seguito è riportato l'albero di ereditarietà di base:

  1. Impostazioni predefinite dal set di strumenti CPP msBuild (il Microsoft.Cpp.Default.props file nella directory di base, importato dal .vcxproj file).

  2. Finestre delle proprietà

  3. File .vcxproj. Questo file può eseguire l'override delle impostazioni predefinite e della finestra delle proprietà.

  4. Metadati degli elementi

Suggerimento

In una pagina delle proprietà una proprietà in grassetto viene definita nel contesto corrente. Viene ereditata una proprietà in caratteri normali.

Visualizzare un file di progetto espanso con tutte i valori importati

Talvolta è utile visualizzare il file espanso per determinare come viene ereditato un valore di proprietà specificato. Per visualizzare la versione espansa, inserire il comando seguente a un prompt dei comandi di Visual Studio. Modificare i nomi dei file segnaposto in quello che si desidera usare.

msbuild /pp:temp.txt myapp.vcxproj

I file di progetto espansi possono essere di grandi dimensioni e difficili da comprendere, a meno che non si abbia familiarità con MSBuild. Di seguito è riportata la struttura di base di un file di progetto:

  1. Proprietà fondamentali del progetto, che non sono esposte nell'IDE.

  2. Importazione di , che definisce alcune proprietà di base indipendenti dal set di Microsoft.cpp.default.propsstrumenti.

  3. Proprietà globali di configurazione (esposte come PlatformToolset e proprietà predefinite Progetto nella pagina Informazioni generali configurazione. Queste proprietà determinano il set di strumenti e le finestre delle proprietà intrinseche importati nel Microsoft.cpp.props passaggio successivo.

  4. Importazione di Microsoft.cpp.props, che imposta la maggior parte delle impostazioni predefinite del progetto.

  5. Importare tutte le finestre delle proprietà, inclusi .user i file. Queste finestre delle proprietà possono ignorare tutto ad eccezione delle proprietà predefinite PlatformToolset e Progetto.

  6. Il resto delle proprietà di configurazione del progetto. Questi valori possono ignorare le operazioni impostate nelle finestre delle proprietà.

  7. Elementi (file) insieme ai relativi metadati. Questi elementi sono sempre l'ultima parola nelle regole di valutazione di MSBuild, anche se si verificano prima di altre proprietà e importazioni.

Per altre informazioni, vedere MSBuild Properties (Proprietà MSBuild).

Configurazioni della build

Una configurazione è solo un gruppo arbitrario di proprietà a cui viene assegnato un nome. Visual Studio offre configurazioni di debug e rilascio. Ogni impostazione consente di impostare in modo appropriato varie proprietà per una build di debug o una build di versione. È possibile usare Configuration Manager per definire configurazioni personalizzate. Sono un modo pratico per raggruppare le proprietà per una versione specifica della compilazione.

Per avere un'idea migliore delle configurazioni di compilazione, aprire Gestione proprietà. È possibile aprirlo scegliendo Visualizza > gestione proprietà o Visualizza > altre proprietà di Windows>, a seconda delle impostazioni. Gestione proprietà include nodi per ogni coppia di configurazione e piattaforma nel progetto. In ognuno di questi nodi sono presenti nodi per le finestre delle proprietà (.props file) che impostano alcune proprietà specifiche per tale configurazione.

Screenshot della finestra Gestione proprietà.

Ad esempio, è possibile passare al riquadro Generale nelle pagine delle proprietà. Modificare la proprietà Set di caratteri in "Not Set" anziché "Use Unicode" (Usa Unicode) e quindi fare clic su OK. Gestione proprietà non visualizza ora alcuna finestra delle proprietà supporto Unicode. Viene rimossa per la configurazione corrente, ma è ancora disponibile per altre configurazioni.

Per altre informazioni su Gestione proprietà e sulle finestre delle proprietà, vedere Condividere o riutilizzare le impostazioni dei progetti di Visual Studio C++.

Suggerimento

Il .user file è una funzionalità legacy. È consigliabile eliminarlo per mantenere correttamente raggruppate le proprietà in base alla configurazione e alla piattaforma.