Personalizando o sistema de buildCustomizing the build system

O MSbuild é um mecanismo de build desenvolvido pela Microsoft que permite compilar aplicativos primariamente .NET.MSbuild is a build engine, developed by Microsoft, that allows for the building of primarily .NET applications. A estrutura Mono também tem sua própria implementação do Build Engine da Microsoft, chamado xbuild.The Mono framework also has its own implementation of Microsoft's Build Engine, called xbuild. No entanto, o xbuild foi desativado para dar lugar ao uso do MSBuild em todos os sistemas operacionais.However, xbuild has been phased out, in favor of using MSBuild on all operating systems.

O MSbuild é usado principalmente como sistema de build para projetos no Visual Studio para Mac.MSbuild is primarily used for as the build system for projects in Visual Studio for Mac.

O MSBuild funciona obtendo um conjunto de entradas, como arquivos de origem, e transformando-os em saídas, como arquivos executáveis.MSBuild works by taking a set of inputs, such as source files, and transforms them to outputs, such as executables. Ela obtém essa saída invocando ferramentas como o compilador.It achieves this output by invoking tools such as the compiler.

Arquivo do MSBuildMSBuild file

O MSBuild usa um arquivo XML, chamado de arquivo de projeto, que define os Itens que fazem parte do seu projeto (como recursos de imagem) e as Propriedades necessárias para compilar o projeto.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. Este arquivo de projeto sempre terá uma extensão de arquivo terminando em proj, como .csproj para projetos C#.This project file will always have a file extension ending in proj, such as .csproj for C# projects.

Exibindo o arquivo do MSBuildViewing the MSBuild file

Localize o arquivo MSBuild clicando com o botão direito do mouse no nome do projeto e selecionando Revelar no localizador.Locate the MSBuild file by right-clicking on your project name and selecting Reveal in Finder. A janela do localizador exibirá todos os arquivos e pastas relacionados ao seu projeto, incluindo o arquivo .csproj, conforme ilustrado na imagem a seguir:The finder window displays all the files and folders related to your project, including the .csproj file, as illustrated in the following image:

local de csproj no Localizador

Para exibir o .csproj em uma nova guia no Visual Studio para Mac, clique com o botão direito do mouse no nome do projeto e navegue até Ferramentas > Editar arquivo: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:

abrindo o csproj no editor de origem

Composição do arquivo do MSBuildComposition of the MSBuild file

Todos os arquivos do MSBuild contêm um elemento de raiz obrigatório Project, dessa maneira: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>

Normalmente, o projeto também importará um arquivo .targets.Typically, the project will also import a .targets file. Este arquivo contém muitas das regras que descrevem como processar e compilar os diversos arquivos.This file contains many of the rules that describe how to process and build the various files. A importação geralmente aparece na parte inferior do seu arquivo proj e, para projetos C#, é semelhante ao seguinte: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" />

O arquivo de destino é outro arquivo MSBuild.The targets file is another MSBuild file. Este arquivo contém o código MSBuild reutilizável por vários projetos.This file contains MSBuild code that is reusable by multiple projects. Por exemplo, o arquivo Microsoft.CSharp.targets, que se encontra em um diretório representado pela propriedade MSBuildBinPath (ou variável), contém a lógica para compilar assemblies C# com base nos arquivos de origem.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.

Itens e propriedadesItems and properties

Há dois tipos de dados fundamentais no MSBuild: itens e propriedades, que são explicados em mais detalhes nas seções a seguir.There are two fundamental data types in MSBuild: items and properties, which are explained in more detail in the following sections.

PropriedadesProperties

As propriedades são pares chave/valor, que são usados para armazenar configurações que afetam a compilação, como opções do compilador.Properties are key/value pairs, which are used to store settings that affect compilation, such as compiler options.

Elas são definidas usando um PropertyGroup e podem conter qualquer número de PropertiesGroups, que pode conter qualquer número de propriedades.They are set using a PropertyGroup and can contain any number of PropertiesGroups, which can contain any number of properties.

Por exemplo, o PropertyGroup para um aplicativo de console simples pode ser semelhante ao XML seguinte: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>

Propriedades podem ser referidas de expressões que usam a sintaxe $().Properties can be referred to from expressions using the $() syntax. Por exemplo, $(Foo) será avaliado como o valor da propriedade Foo.For example, $(Foo) will be evaluated as the value of the Foo property. Se a propriedade não foi definida, ela será avaliada como uma cadeia de caracteres vazia, sem erros.If the property has not been set, it will evaluate as an empty string, without any error.

ItensItems

Os itens fornecem uma maneira de lidar com entradas para o sistema de build, como listas ou conjuntos e geralmente representam arquivos.Items provide a way of dealing with inputs into the build system as lists or sets, and typically represent files. Cada item tem um tipo e uma especificação de item, bem como metadados arbitrários opcionais.Each item has an item type, an item spec, and optional arbitrary metadata. Observe que o MSBuild não funciona em itens individuais, ele obtém todos os itens de um determinado tipo, chamado conjunto de itensNote that MSBuild doesn't operate on individual items, it takes on all the items of a given type-called an item set

Os itens são criados declarando um ItemGroup.Items are created by declaring an ItemGroup. Pode haver qualquer quantidade de ItemGroups, que podem conter qualquer quantidade de itens.There can be any number of ItemGroups, which can contain any number of items.

Por exemplo, o trecho de código a seguir cria telas de inicialização do iOS.For example, the following code snippet creates the iOS Launch Screens. As telas de inicialização têm o tipo de compilação BundleResource, com a especificação como o caminho para a imagem: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>

Os conjuntos de itens podem ser referidos de expressões que usam a sintaxe @().Item sets can be referred to from expressions using the @() syntax. Por exemplo, @(BundleResource) será avaliado como um conjunto de itens BundleResource, o que inclui todos os itens de BundleResource.For example, @(BundleResource) will be evaluated as the BundleResource item set, which means all of the BundleResource items. Se não houver nenhum item desse tipo, ele ficará vazio e sem erros.If there are no items of this type, it will be empty, without any error.

Recursos para conhecer o MSBuildResources for learning MSBuild

Os recursos a seguir podem ser usados para conhecer melhor o MSBuild:The following resources can be used to learn about MSBuild in more detail: