Override delle impostazioni ToolsVersion
L'attributo ToolsVersion
nell'elemento Project nei file di progetto di Visual Studio e MSBuild è considerato obsoleto in Visual Studio 2019 e versioni successive. È possibile eliminarlo in modo sicuro. Questo articolo descrive l'uso nelle versioni precedenti di MSBuild o per set di strumenti personalizzati. Vedere Configurazioni standard e personalizzate del set di strumenti.
È possibile modificare il set di strumenti per progetti e soluzioni in uno dei tre modi seguenti:
Usando l'opzione
-ToolsVersion
(o-tv
, in breve) quando si compila il progetto o la soluzione dalla riga di comando.Impostando il parametro
ToolsVersion
sull'attività MSBuild.Impostando la proprietà
$(ProjectToolsVersion)
in un progetto all'interno di una soluzione. Questo consente di compilare un progetto in una soluzione con una versione del set di strumenti diversa da quella degli altri progetti.
Eseguire l'override delle impostazioni di ToolsVersion di progetti e soluzioni nelle compilazioni da riga di comando
Anche se i progetti Visual Studio vengono in genere compilati con la versione di ToolsVersion specificata nel file di progetto, è possibile usare l'opzione -ToolsVersion
(o -tv
) della riga di comando per eseguire l'override del valore e compilare tutti i progetti e le dipendenze tra progetti con un set di strumenti diverso. Ad esempio:
msbuild.exe someproj.proj -tv:12.0 -p:Configuration=Debug
Nell'esempio seguente tutti i progetti vengono compilati usando ToolsVersion 12.0. Vedere la sezione Ordine di precedenza più avanti in questo argomento.
Quando si usa l'opzione -tv
della riga di comando, è possibile usare facoltativamente la proprietà $(ProjectToolsVersion)
nei progetti singoli per compilarli con un valore ToolsVersion diverso dagli altri progetti della soluzione.
Eseguire l'override delle impostazioni ToolsVersion usando il parametro ToolsVersion dell'attività MSBuild
L'attività MSBuild è il mezzo principale per consentire a un progetto di compilarne un altro. Per consentire all'attività MSBuild di compilare un progetto con un ToolsVersion diverso da quello specificato nel progetto, è disponibile un parametro dell'attività facoltativo denominato ToolsVersion
. L'esempio seguente illustra come usare tale parametro:
Creare un file denominato projectA.proj e contenente il codice seguente:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0"> <Target Name="go" > <Message Text="projectA.proj" /> <Message Text="MSBuildToolsVersion: $(MSBuildToolsVersion)" /> <Message Text="MSBuildToolsPath: $(MSBuildToolsPath)" /> <MSBuild Projects="projectB.proj" ToolsVersion="2.0" Targets="go" /> </Target> </Project>
Creare un altro file denominato projectB.proj e contenente il codice seguente:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0"> <Target Name="go"> <Message Text="projectB.proj" /> <Message Text="MSBuildToolsVersion: $(MSBuildToolsVersion)" /> <Message Text="MSBuildToolsPath: $(MSBuildToolsPath)" /> </Target> </Project>
Immettere il comando seguente in un prompt dei comandi:
msbuild projectA.proj -t:go -toolsversion:3.5
Viene visualizzato l'output seguente. Per
projectA
, l'impostazione-toolsversion:3.5
nella riga di comando esegue l'override dell'impostazioneToolsVersion=12.0
nel tagProject
.ProjectB
viene chiamato da un'attività inprojectA
. L'attività presentaToolsVersion=2.0
, che esegue l'override delle altre impostazioni diToolsVersion
perprojectB
.Output: projectA.proj MSBuildToolsVersion: 3.5 MSBuildToolsPath: C:\Windows\Microsoft.NET\Framework\v3.5 projectB.proj MSBuildToolsVersion: 2.0 MSBuildToolsPath: C:\Windows\Microsoft.NET\Framework\v2.0.50727
Ordine di precedenza
L'ordine di precedenza, dal più alto al più basso, usato per determinare ToolsVersion
è il seguente:
Attributo
ToolsVersion
sull'attività MSBuild usato per compilare il progetto, se disponibile.Opzione
-toolsversion
(o-tv
) usata nel comando msbuild.exe, se disponibile.Se la variabile di ambiente
MSBUILDTREATALLTOOLSVERSIONSASCURRENT
è impostata, usare il valoreToolsVersion
corrente.Se la variabile di ambiente
MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT
è impostata e il valoreToolsVersion
definito nel file di progetto è maggiore del valoreToolsVersion
corrente, usare il valoreToolsVersion
corrente.Se la variabile di ambiente
MSBUILDLEGACYDEFAULTTOOLSVERSION
non è impostata o seToolsVersion
non è impostato, vengono usati i passaggi seguenti:Attributo
ToolsVersion
dell'elemento Project del file di progetto. Se questo attributo non esiste, si presuppone che si tratti della versione corrente.Versione predefinita degli strumenti del file MSBuild.exe.config.
Versione predefinita degli strumenti nel Registro di sistema. Per altre informazioni, vedere Configurazioni standard e personalizzate del set di strumenti.
Se la variabile di ambiente
MSBUILDLEGACYDEFAULTTOOLSVERSION
non è impostata, vengono usati i passaggi seguenti:Se la variabile di ambiente
MSBUILDDEFAULTTOOLSVERSION
è impostata su un valoreToolsVersion
esistente, usare tale valore.Se
DefaultOverrideToolsVersion
è impostata in MSBuild.exe.config, usarla.Se
DefaultOverrideToolsVersion
è impostata nel Registro di sistema, usarla.In caso contrario, usare il valore
ToolsVersion
corrente.