Ereditarietà delle proprietà nei progetti di Visual Studio

Il Visual Studio del progetto nativo è basato 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. Sarà utile comprenderne il funzionamento. Ciò è particolarmente importante se si vogliono definire configurazioni personalizzate. Oppure, per creare set riutilizzabili di proprietà che è possibile condividere e importare in più progetti.

File con estensione vcxproj, props e targets

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

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

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

Le proprietà vengono archiviate anche in .props tutti i file personalizzati che è possibile aggiungere al progetto. È consigliabile NON modificare questi file manualmente. 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 .vcxproj e 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 le pagine delle proprietà, è anche importante prestare attenzione alla posizione in cui è stata impostata. Se si imposta una proprietà su "X" in un file, ma la proprietà è impostata su "Y" nel file di progetto, il progetto verrà compilato con la proprietà impostata su .props "Y". Se la stessa proprietà è impostata su "Z" per un elemento di progetto, ad esempio un file, il motore di MSBuild .cpp userà il valore "Z".

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

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

  2. Finestre delle proprietà

  3. .vcxproj File. 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 Microsoft.cpp.default.props , che definisce alcune proprietà di base indipendenti dal set di strumenti.

  3. Le proprietà di configurazione globali (esposte come PlatformToolset e Project proprietà predefinite nella pagina Generale della configurazione. Queste proprietà determinano il set di strumenti e le finestre delle proprietà intrinseche da Microsoft.cpp.props importare nel passaggio successivo.

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

  5. Importazione di tutte le finestre delle proprietà, inclusi .user i file. Queste finestre delle proprietà possono eseguire l'override di tutti gli elementi tranne PlatformToolset Project proprietà predefinite.

  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 in MSBuild di valutazione, anche se si verificano prima di altre proprietà e importazioni.

Per altre informazioni, vedere MSBuild proprietà.

Configurazioni della build

Una configurazione è solo un gruppo arbitrario di proprietà a cui viene assegnato un nome. Visual Studio le configurazioni di debug e rilascio. Ogni imposta varie proprietà in modo appropriato per una build di debug o una build di rilascio. È possibile usare il Gestione configurazione per definire configurazioni personalizzate. Si tratta di un modo pratico per raggruppare le proprietà per una versione specifica della compilazione.

Per avere un'idea più chiara delle configurazioni della build, aprire Gestione proprietà. È possibile aprirlo scegliendo Visualizza > Gestione proprietà o Visualizza > altre Windows > Gestione proprietà , a seconda delle impostazioni. Gestione proprietà contiene 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à dati.

Ad esempio, è possibile passare al riquadro Generale nelle pagine delle proprietà. Modificare la proprietà Set di caratteri in "Non impostato" anziché su "Usa Unicode" e quindi fare clic su OK. La Gestione proprietà ora non mostra alcuna finestra delle proprietà supporto Unicode. Viene rimossa per la configurazione corrente, ma è ancora presente 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 le proprietà raggruppate correttamente in base alla configurazione e alla piattaforma.