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:
Impostazioni predefinite dal set di strumenti CPP msBuild (il
Microsoft.Cpp.Default.props
file nella directory di base, importato dal.vcxproj
file).Finestre delle proprietà
File
.vcxproj
. Questo file può eseguire l'override delle impostazioni predefinite e della finestra delle proprietà.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:
Proprietà fondamentali del progetto, che non sono esposte nell'IDE.
Importazione di , che definisce alcune proprietà di base indipendenti dal set di
Microsoft.cpp.default.props
strumenti.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.Importazione di
Microsoft.cpp.props
, che imposta la maggior parte delle impostazioni predefinite del progetto.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.Il resto delle proprietà di configurazione del progetto. Questi valori possono ignorare le operazioni impostate nelle finestre delle proprietà.
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.
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.