Creare una configurazione personalizzata del set di strumenti

Un set di strumenti di MSBuild contiene riferimenti a attività, destinazioni e strumenti che è possibile usare per compilare un progetto di applicazione. MSBuild include un set di strumenti standard, ma è anche possibile creare set di strumenti personalizzati.

Configurazioni del set di strumenti standard

MSBuild contiene il set Current di strumenti standard che fa riferimento alla versione corrente di MSBuild, installata nella cartella MSBuild\Current\Bin nella directory di installazione di Visual Studio.

Definizioni del set di strumenti personalizzato

Quando un set di strumenti standard non soddisfa i requisiti di compilazione, è possibile creare un oggetto personalizzato Toolset. Ad esempio, si potrebbe avere uno scenario di lab di compilazione in cui è necessario disporre di un sistema separato per la compilazione di progetti C++. Usando un oggetto personalizzato Toolset, è possibile assegnare valori personalizzati all'attributo ToolsVersion quando si esegue MSBuild.exe usando l'opzione della /toolsVersion riga di comando. Se si specifica l'attributo ToolsVersion nel file di progetto, viene ignorato.

In questo modo si può anche usare la proprietà $(MSBuildToolsPath) per importare i file target da quella directory, nonché definire le proprietà del set di strumenti personalizzato che possono essere usate per qualsiasi progetto che usa tale set di strumenti.

Specificare un set di strumenti personalizzato nel file di configurazione per MSBuild.exe o per lo strumento personalizzato che ospita il motore MSBuild, se in uso. Ad esempio, il file di configurazione per MSBuild.exe può includere la definizione seguente Toolset se si vuole definire un set di strumenti denominato MyCustomToolset.

<msbuildToolsets default="MyCustomToolset">
   <toolset toolsVersion="MyCustomToolset">
      <property name="MSBuildToolsPath"
        value="C:\SpecialPath" />
   </toolset>
</msbuildToolsets>

È necessario definire <msbuildToolsets> anche nel file di configurazione, come indicato di seguito.

<configSections>
   <section name="msbuildToolsets"
       type="Microsoft.Build.BuildEngine.ToolsetConfigurationSection,
       Microsoft.Build, Version=15.1.0.0, Culture=neutral,
       PublicKeyToken=b03f5f7f11d50a3a">
   </section>
</configSections>

Nota

Per consentire una lettura corretta, <configSections> deve essere la prima sottosezione della sezione <configuration>.

ToolsetConfigurationSection è una sezione di configurazione personalizzata che può essere usata da qualsiasi host MSBuild per la configurazione personalizzata. Se si usa un set di strumenti personalizzato, non sono necessarie operazioni dell'host per inizializzare il motore di compilazione, tranne la definizione delle voci del file di configurazione.

Le seguenti proprietà sono specifiche per il valore di ToolsVersion usato nei progetti:

  • $(MSBuildBinPath) è impostato sul valore ToolsPath specificato nel Registro di sistema o nel file di configurazione in cui è definito ToolsVersion. L'impostazione $(MSBuildToolsPath) nel Registro di sistema o nel file di configurazione specifica la posizione delle attività e delle destinazioni principali. Nel file di progetto viene eseguito il mapping alla proprietà $(MSBuildBinPath) e anche alla proprietà $(MSBuildToolsPath).

  • $(MSBuildToolsPath) è una proprietà riservata definita dalla proprietà MSBuildToolsPath specificata nel file di configurazione. Questa proprietà sostituisce $(MSBuildBinPath). Tuttavia, $(MSBuildBinPath) viene portato avanti per la compatibilità. Un set di strumenti personalizzato deve definire $(MSBuildToolsPath) o $(MSBuildBinPath) ma non entrambi, a meno che non abbiano entrambi lo stesso valore.

    Si possono anche aggiungere al file di configurazione proprietà personalizzate specifiche di ToolsVersion, usando la stessa sintassi usata per aggiungere la proprietà MSBuildToolsPath. Per rendere disponibili per il file di progetto queste proprietà personalizzate, usare lo stesso nome del valore specificato nel file di configurazione. È possibile definire i set di strumenti ma non i subset di strumenti nel file di configurazione.