Personnalisation du système de générationCustomizing the build system

MSBuild est un moteur de génération, développé par Microsoft, qui permet de générer principalement des applications .NET.MSbuild is a build engine, developed by Microsoft, that allows for the building of primarily .NET applications. Le framework Mono a également sa propre implémentation du moteur de génération de Microsoft, appelée xbuild.The Mono framework also has its own implementation of Microsoft's Build Engine, called xbuild. Cependant, xbuild a été supprimé en faveur de l’utilisation de MSBuild sur tous les systèmes d’exploitation.However, xbuild has been phased out, in favor of using MSBuild on all operating systems.

MSbuild est principalement utilisé comme système de génération des projets dans Visual Studio pour Mac.MSbuild is primarily used for as the build system for projects in Visual Studio for Mac.

MSBuild fonctionne en prenant un ensemble d’entrées, comme des fichiers sources, et les transforme en sorties, comme des fichiers exécutables.MSBuild works by taking a set of inputs, such as source files, and transforms them to outputs, such as executables. Il réalise ces sorties en appelant des outils, comme le compilateur.It achieves this output by invoking tools such as the compiler.

Fichier MSBuildMSBuild file

MSBuild utilise un fichier XML, appelé fichier projet, qui définit les éléments qui font partie de votre projet (par exemple des ressources d’image) et les propriétés nécessaires pour générer votre projet.MSBuild uses an XML file, called a project file, that defines the Items that are part of your project (such as image resources), and the Properties required to build your project. Ce fichier projet a toujours une extension de fichier se terminant par proj, par exemple .csproj pour les projets C#.This project file will always have a file extension ending in proj, such as .csproj for C# projects.

Affichage du fichier MSBuildViewing the MSBuild file

Recherchez le fichier MSBuild en cliquant sur le nom de votre projet et en sélectionnant Afficher dans le Finder.Locate the MSBuild file by right-clicking on your project name and selecting Reveal in Finder. La fenêtre du Finder affiche tous les fichiers et dossiers associés à votre projet, notamment le fichier .csproj, comme illustré dans l’image suivante :The finder window displays all the files and folders related to your project, including the .csproj file, as illustrated in the following image:

Emplacement de csproj dans le Finder

Pour afficher le fichier .csproj dans un nouvel onglet de Visual Studio pour Mac, cliquez sur le nom de votre projet et accédez à Outils > Modifier le fichier :To display the .csproj in a new tab in Visual Studio for Mac, right-click on your project name and browse to Tools > Edit File:

ouverture de csproj dans l’éditeur de code source

Composition du fichier MSBuildComposition of the MSBuild file

Tous les fichiers MSBuild contiennent un élément racine Project obligatoire, comme indiqué ci-dessous :All MSBuild files contain a mandatory root Project element, like so:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>

En règle générale, le projet importe également un fichier .targets.Typically, the project will also import a .targets file. Ce fichier contient la plupart des règles qui décrivent comment traiter et générer les différents fichiers.This file contains many of the rules that describe how to process and build the various files. L’importation figure généralement dans le bas de votre fichier proj et ressemble à ceci pour les projets C# :The import usually appear towards the bottom of your proj file, and for C# projects look something like this:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

Le fichier .targets est un autre fichier MSBuild.The targets file is another MSBuild file. Ce fichier contient le code MSBuild qui est réutilisable par plusieurs projets.This file contains MSBuild code that is reusable by multiple projects. Par exemple, le fichier Microsoft.CSharp.targets, qui se trouve dans un répertoire représenté par la propriété (ou variable) MSBuildBinPath, contient la logique de création des assemblys C# à partir des fichiers sources C#.For example, the Microsoft.CSharp.targets file, which is found in a directory represented by the MSBuildBinPath property (or variable), contains the logic for building C# assemblies from C# source files.

Éléments et propriétésItems and properties

Il existe deux types de données fondamentaux dans MSBuild : les éléments et les propriétés, qui sont expliqués plus en détail dans les sections suivantes.There are two fundamental data types in MSBuild: items and properties, which are explained in more detail in the following sections.

PropriétésProperties

Les propriétés sont des paires clé/valeur, qui sont utilisées pour stocker les paramètres qui affectent la compilation, comme les options du compilateur.Properties are key/value pairs, which are used to store settings that affect compilation, such as compiler options.

Elles sont définies à l’aide d’un PropertyGroup et peuvent contenir un nombre quelconque de PropertiesGroups, qui peuvent eux-mêmes contenir un nombre quelconque de propriétés.They are set using a PropertyGroup and can contain any number of PropertiesGroups, which can contain any number of properties.

Par exemple, le PropertyGroup pour une pour une application de console simple peut se présenter comme le XML suivant :For example, the PropertyGroup for a simple console application might look like the following XML:

<PropertyGroup>
        <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
        <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
        <ProjectGuid>{E248730E-1393-43CC-9183-FFA42F63BE81}</ProjectGuid>
        <OutputType>Exe</OutputType>
        <RootNamespace>refactoring</RootNamespace>
        <AssemblyName>refactoring</AssemblyName>
        <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    </PropertyGroup>

Les propriétés peuvent être référencées dans des expressions avec la syntaxe $().Properties can be referred to from expressions using the $() syntax. Par exemple, $(Foo) sera évalué comme valeur de la propriété Foo.For example, $(Foo) will be evaluated as the value of the Foo property. Si la propriété n’a pas été définie, elle est évaluée comme chaîne vide, sans provoquer d’erreur.If the property has not been set, it will evaluate as an empty string, without any error.

ÉlémentsItems

Les éléments offrent un moyen de traiter les entrées dans le système de génération sous formes de listes ou d’ensembles, et représentent en général des fichiers.Items provide a way of dealing with inputs into the build system as lists or sets, and typically represent files. Chaque élément a un typed’élément, une spécification d’élément et des métadonnées arbitraires facultatives.Each item has an item type, an item spec, and optional arbitrary metadata. Notez que MSBuild ne travaille pas sur des éléments individuels, il prend tous les éléments d’un type donné, appelé un ensemble d’éléments.Note that MSBuild doesn't operate on individual items, it takes on all the items of a given type-called an item set

Les éléments sont créés en déclarant un ItemGroup.Items are created by declaring an ItemGroup. Il peut y avoir un nombre quelconque d’ItemGroups, qui peuvent contenir un nombre quelconque d’éléments.There can be any number of ItemGroups, which can contain any number of items.

Par exemple, l’extrait de code ci-dessous crée les écrans de lancement d’iOS.For example, the following code snippet creates the iOS Launch Screens. Les écrans de lancement ont le type de build BundleResource, avec les spécifications en tant que chemin d’accès à l’image :The Launch Screens have the build type BundleResource, with the spec as the path to the image:

 <ItemGroup>
    <BundleResource Include="Resources\Default-568h%402x.png" />
    <BundleResource Include="Resources\Default%402x.png" />
    <BundleResource Include="Resources\Default.png" />
    <BundleResource Include="Resources\Default-Portrait.png" />
    <BundleResource Include="Resources\Default-Portrait%402x.png" />
    <BundleResource Include="Resources\Default-Landscape%402x.png" />
  </ItemGroup>

Les ensembles d’éléments peuvent être référencés dans des expressions avec la syntaxe @().Item sets can be referred to from expressions using the @() syntax. Par exemple, @(BundleResource) sera évalué comme étant l’ensemble d’éléments BundleResource, ce qui signifie tous les éléments BundleResource.For example, @(BundleResource) will be evaluated as the BundleResource item set, which means all of the BundleResource items. S’il n’existe aucun élément de ce type, il sera vide, sans provoquer d’erreur.If there are no items of this type, it will be empty, without any error.

Ressources pour l’apprentissage de MSBuildResources for learning MSBuild

Les ressources suivantes peuvent être utilisées pour obtenir plus d’informations sur MSBuild :The following resources can be used to learn about MSBuild in more detail: