Personalizzare la compilazione locale

Quando si lavora in un team che ha usato un repository di codice come GitHub, il controllo del codice sorgente o qualsiasi codebase condivisa, ma si vogliono personalizzare le compilazioni nel computer locale, ad esempio temporaneamente per riprodurre un bug o testare una configurazione diversa, può essere utile mantenere tali personalizzazioni separate dai file di progetto condivisi condivisi con il repository di codice condiviso. Questo articolo descrive alcune estensioni di compilazione disponibili in MSBuild che consentono di creare configurazioni personalizzate specifiche dell'utente o solo locali.

File con estensione user

L'uso $(MSBuildProjectFullPath).userdi , detto .user anche file in questo contesto, è anche un'opzione. Questo file è progettato per mantenere estensioni, opzioni o variabili specifiche del computer locale. Non è progettato per essere caricato nel controllo del codice sorgente e viene controllato automaticamente in .gitignore. Per modifiche più estese preferiscono modificare il progetto stesso, in modo che i gestori futuri non devono conoscere questo meccanismo di estensione.

Nei progetti multitargetti supportati il .user file viene importato automaticamente nelle compilazioni interne ed esterne, in modo da poter semplicemente creare il file all'interno della soluzione. Se si lavora su un altro tipo di compilazione, è comunque possibile usare il .user file. È possibile crearlo all'interno della soluzione e quindi importarlo nel file di progetto.

<Import Project="$(MSBuildProjectFullPath).user" Condition="Exists('$(MSBuildProjectFullPath).user')"/>

MSBuildExtensionsPath e MSBuildUserExtensionsPath

Per convenzione, molti file logici di compilazione importano

$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\{TargetFileName}\ImportBefore\*.targets

prima del contenuto e

$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\{TargetFileName}\ImportAfter\*.targets

dopo. In questo modo, gli SDK installati possono espandere la logica di compilazione di tipi di progetto comuni.

La stessa struttura di directory viene ricercata in $(MSBuildUserExtensionsPath), vale a dire la cartella %LOCALAPPDATA%\Microsoft\MSBuild per ogni utente. I file in tale cartella saranno importati per tutte le compilazioni del tipo di progetto corrispondente, eseguito con le credenziali dell'utente interessato. Per disabilitare le estensioni utente, impostare le proprietà denominate in base al file di importazione nel criterio ImportUserLocationsByWildcardBefore{ImportingFileNameWithNoDots}. Ad esempio, se ImportUserLocationsByWildcardBeforeMicrosoftCommonProps viene impostato su false l'importazione di $(MSBuildUserExtensionsPath)\$(MSBuildToolsVersion)\Imports\Microsoft.Common.props\ImportBefore\* non sarà eseguita.

Configurazione personalizzata basata sul linguaggio del progetto

Se sono necessari comportamenti diversi a seconda del linguaggio .NET (C#, Visual Basic o F#), è possibile aggiungere gruppi di proprietà con condizioni che dipendono dall'estensione del file di progetto in $(MSBuildProjectExtension) per definire le proprietà specifiche del linguaggio e i relativi valori.

<PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.vbproj'">
   <!-- Put VB-only property definitions here -->
</PropertyGroup>
<PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.fsproj'">
   <!-- Put F#-only property definitions here -->
</PropertyGroup>
<PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.csproj'">
   <!-- Put C#-only property definitions here -->
</PropertyGroup>