Condividi tramite


Override delle impostazioni ToolsVersion

È possibile modificare il set di strumenti per progetti e soluzioni in tre modi:

  1. utilizzando l'opzione /ToolsVersion o /tv, in breve) quando si compila il progetto o la soluzione dalla riga di comando

  2. impostando il parametro ToolsVersion sull'attività MSBuild

  3. impostando la proprietà $(ProjectToolsVersion) in un progetto all'interno di una soluzione. Ciò 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 in genere vengono compilati con la versione di ToolsVersion specificata nel file di progetto, è possibile utilizzare 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 utilizzando ToolsVersion 12.0 Vedere la sezione "Ordine di precedenza" più avanti in questo argomento.

Quando si utilizza l'opzione /tv della riga di comando, è possibile utilizzare facoltativamente la proprietà $(ProjectToolsVersion) nei progetti singoli per compilarli con un valore ToolsVersion diverso dagli altri progetti della soluzione.

Override delle impostazioni ToolsVersion utilizzando il parametro ToolsVersion dell'attività MSBuild.

L'attività MSBuild è il mezzo principale perché un progetto ne compili 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. Nell'esempio riportato di seguito viene illustrato come utilizzare tale parametro:

  1. Creare un file denominato projectA.proj e contenente il codice seguente:

    <Project xmlns="https://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>
    
  2. Creare un altro file denominato projectB.proj e contenente il codice seguente:

    <Project xmlns="https://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>
    
  3. Immettere il comando seguente in un prompt dei comandi:

    msbuild projectA.proj /t:go /toolsversion:3.5
    
  4. Viene visualizzato l'output seguente: Per projectA, l'impostazione /toolsversion:3.5 nella riga di comando esegue l'override dell'impostazione ToolsVersion=12.0 nel tag Project.

    ProjectB viene chiamata da un'attività in projectA. L'attività ha ToolsVersion=2.0, che esegue l'override delle altre impostazioni di ToolsVersion per projectB.

    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, utilizzato per determinare ToolsVersion è:

  1. Attributo ToolsVersion sull'attività MSBuild utilizzato per compilare il progetto, se disponibile.

  2. Opzione /tvo /toolsversion utilizzata nel comando msbuild.exe, se disponibile.

  3. Se la variabile di ambiente MSBUILDTREATALLTOOLSVERSIONSASCURRENT è impostata, utilizzare quindi il valore ToolsVersion corrente.

  4. Se la variabile di ambiente MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT è impostata e il valore ToolsVersion definito nel file di progetto è maggiore del valore ToolsVersion corrente, utilizzare il valore ToolsVersion corrente.

  5. Se la variabile di ambiente MSBUILDLEGACYDEFAULTTOOLSVERSION non è impostata o se ToolsVersion non è impostato, vengono utilizzati i passaggi seguenti:

    1. Attributo ToolsVersion dell'elemento Project del file di progetto. Se questo attributo non esiste, viene presupposta la versione corrente.

    2. La versione predefinita degli strumenti del file MSBuild.exe.config.

    3. La versione predefinita degli strumenti nel Registro di sistema. Per ulteriori informazioni, vedere Configurazioni standard e personalizzate del set di strumenti.

  6. Se la variabile di ambiente MSBUILDLEGACYDEFAULTTOOLSVERSION non è impostata, vengono utilizzati i passaggi seguenti:

    1. Se la variabile di ambiente MSBUILDDEFAULTTOOLSVERSION è impostata su un valore ToolsVersion esistente, utilizzarlo.

    2. Se DefaultOverrideToolsVersion è impostata in MSBuild.exe.config, utilizzarla.

    3. Utilizzare DefaultOverrideToolsVersion, se è impostata nel Registro di sistema.

    4. In caso contrario, utilizzare l'attuale ToolsVersion.

Vedere anche

Concetti

Set di strumenti di MSBuild (ToolsVersion)

Configurazioni standard e personalizzate del set di strumenti

Altre risorse

Cenni preliminari sul multitargeting di MSBuild

Concetti relativi a MSBuild