Compartilhar via


Passo a passo: Usando o MSBuild

MSBuild é a plataforma de compilação e para Microsoft Visual Studio.Essa explicação passo a passo apresenta os blocos de construção do MSBuild e mostra como escrever, manipular, e depurar projetos MSBuild.Você aprenderá como:

  • criando e manipulando um arquivo de projeto.

  • Como usar as propriedades de compilação

  • Como usar itens de compilação.

Você pode executar o MSBuild Visual Studio, ou da janela de comando.Em essa explicação passo a passo, você cria um arquivo de projeto do MSBuild usando Visual Studio.Você edita o arquivo de projeto no Visual Studio, e usa uma janela de comando para compilar o projeto e para examinar os resultados.

Criando um projeto do MSBuild

O sistema do projeto do Visual Studio é baseado em MSBuild.Isso torna fácil criar um novo arquivo de projeto usando Visual Studio.Em esta seção, você cria um arquivo de projeto visual C#.Você pode escolher criar o invés de um arquivo de projeto do Visual Basic.Em o contexto de essa explicação passo a passo, a diferença entre os dois arquivos de projeto for menor.

para criar um arquivo de projeto

  1. Abra Visual Studio.

  2. No menu File, aponte para New, e em seguida, clique em Project.

  3. Em a caixa de diálogo de Novo Projeto , selecione o tipo de projeto visual C#, selecione o modelo de Aplicativo de Windows Forms .Em a caixa de Nome , digite BuildApp.entre em Local para a solução, por exemplo, D:\.Aceitar as opções para Criar diretório para a solução selecionado (), Adicionar ao Controle do Código-Fonte (não marcado), e Nome da soluçãoBuildApp().

    clique OK para criar o arquivo de projeto.

examinando o projeto Arquivo

Em a seção anterior, você usou o Visual Studio para criar um arquivo de projeto visual C#.O arquivo de projeto é representado em Gerenciador de Soluções pelo nó de projeto chamado BuildApp.Você pode usar o editor de códigos do Visual Studio para examinar o arquivo de projeto.

para examinar o arquivo de projeto

  1. Em Gerenciador de Soluções, clique no nó de projeto BuildApp.

  2. Em o navegador de Propriedades , observe que a propriedade de Arquivo de projeto é BuildApp.csproj.todos os arquivos de projeto são nomeados com o sufixo “proj”.Se você tiver criado um projeto Visual Basic, o nome de arquivo de projeto BuildApp.vbproj seria.

  3. Clique com o botão direito do mouse no nó de projeto, clique em Descarregar projeto.

  4. Clique com o botão direito do mouse no nó de projeto novamente, clique em editar BuildApp.csproj.

    O arquivo de projeto aparece no editor de códigos.

destinos e tarefas

Arquivos de projeto são arquivos formatados com o nó raiz Projeto.

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

Você deve especificar o namespace xmlns no elemento do projeto.

O trabalho de compilação de um aplicativo é feito com Destino e elementos de tarefa .

  • Uma tarefa é a menor unidade de trabalho, ou seja átomo” de “de uma construção.As tarefas são componentes executáveis independentes que podem ter entrada e saída.Não há nenhuma tarefa atualmente ou referenciada definida no arquivo de projeto.Você adiciona tarefas ao arquivo de projeto nas seções a seguir.Para obter mais informações, consulte o tópico Tarefas do MSBuild.

  • Um destino é uma seqüência chamado de tarefas.Há dois destinos no final do arquivo de projeto que são incluídos no momento nos comentários de HTML: BeforeBuild e AfterBuild.

    <Target Name="BeforeBuild">
    </Target>
    <Target Name="AfterBuild">
    </Target>
    

    Para obter mais informações, consulte o tópico Destinos do MSBuild.

O nó de projeto tem um DefaultTargets opcional que o atributo que seleciona o destino padrão para criar, compila em esse caso.

<Project ToolsVersion="4.0" DefaultTargets="Build" ...

O destino de compilação não está definido no arquivo de projeto.Em vez de isso, é importado do arquivo Microsoft.CSharp.targets usando o elemento de Importar .

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

Os arquivos são efetivamente importados inseridos no arquivo de projeto onde quer que são referenciados.

MSBuild mantém registro dos destinos de uma compilação, e garante que cada destino é compilado não mais de uma vez.

adicionando um destino e uma tarefa

Adicione um destino para o arquivo de projeto.Adicione uma tarefa de destino que imprime - out uma mensagem.

para adicionar um destino e uma tarefa

  1. Adicione as linhas ao arquivo de projeto, logo após a declaração de importação:

    <Target Name="HelloWorld">
    </Target>
    

    Isso cria um alvo nomeado HelloWorld.Observe que você tenha suporte Intellisense para editar o arquivo de projeto.

  2. Adicionar linhas ao destino HelloWorld, de modo que a seção resultante parece com esta aparência:

    <Target Name="HelloWorld">
      <Message Text="Hello"></Message>
      <Message Text="World"></Message>
    </Target>
    
  3. Salve o arquivo de projeto.

A tarefa de mensagem é uma das muitas tarefas que acompanha o MSBuild.Para obter uma lista completa das tarefas disponíveis e informações de uso, consulte Referência de tarefa do MSBuild.

A tarefa de mensagens recebe o valor da cadeia de caracteres do atributo de texto como entrada e o exibe em um dispositivo de saída.O destino HelloWorld executar a tarefa de mensagem duas vezes: para exibir o primeiro “olá”, e exibir no “hello world”.

compilando o destino

MSBuild execução de Prompt de Comando Visual Studio para criar o destino HelloWorld definido acima.Use a opção de linha de comando do /target ou /t para selecionar o destino.

ObservaçãoObservação

Nós referiremos Prompt de Comando Visual Studio como Janela de Comando nas seções a seguir.

Para criar o destino

  1. Clique em Iniciar, clique em Todos os Programas.Localize e clique Prompt de Comando Visual Studio na pasta de O Visual Studio .

  2. A janela de comando, navegue até a pasta que contém o arquivo de projeto, em esse caso, D:\BuildApp\BuildApp.

  3. Execute o msbuild com a opção /t:HelloWorldde comando.Isso seleciona e compila o destino HelloWorld:

    msbuild buildapp.csproj /t:HelloWorld
    
  4. Examine a saída em Janela de Comando.Você deve ver as duas linhas “hello world” e “hello world”:

    Hello
    World
    
ObservaçãoObservação

Se ao invés de isso você vê The target "HelloWorld" does not exist in the projectentão você tiver esquecido provavelmente salve o arquivo de projeto no editor de códigos.Salve o arquivo e tente novamente.

Alternando entre o editor de códigos e a janela de comando, você pode modificar o arquivo de projeto e rapidamente ver os resultados.

ObservaçãoObservação

Se você executar o msbuild sem a opção de linha de comando /t, o msbuild compila o destino de DefaultTarget determinado pelo atributo do elemento do projeto, em esse caso é “”.Isso cria o aplicativo BuildApp.exe de formulários do windows.

Propriedades de compilação

As propriedades de compilação são pares nome-valor que guiam a compilação.Várias propriedades de compilação já estão definidas na parte superior do arquivo de projeto:

<PropertyGroup>
...
  <ProductVersion>10.0.11107</ProductVersion>
  <SchemaVersion>2.0</SchemaVersion>
  <ProjectGuid>{30E3C9D5-FD86-4691-A331-80EA5BA7E571}</ProjectGuid>
  <OutputType>WinExe</OutputType>
...
</PropertyGroup>

todas as propriedades são elementos filho de elementos de PropertyGroup.O nome da propriedade é o nome do elemento filho, e o valor da propriedade é o elemento de texto no elemento filho.Por exemplo,

<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

define a propriedade chamada TargetFrameworkVersion, dando a ele o valor da cadeia de caracteres “v4.0”.

As propriedades de compilação podem ser redefinidas a qualquer momento.Se

<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

aparece posteriormente no arquivo de projeto, ou em um arquivo importou posteriormente no arquivo de projeto, então TargetFrameworkVersion leva o novo valor “v3.5”.

examinando um valor de propriedade

Para obter o valor de uma propriedade, use a seguinte sintaxe, onde PropertyName é o nome da propriedade:

$(PropertyName)

Use essa sintaxe para examinar as propriedades no arquivo de projeto.

para examinar um valor de propriedade

  1. Editor de códigos de, substitua o destino HelloWorld com esse código:

    <Target Name="HelloWorld">
      <Message Text="Configuration is $(Configuration)" />
      <Message Text="MSBuildToolsPath is $(MSBuildToolsPath)" />
    </Target>
    
  2. Salve o arquivo de projeto.

  3. De Janela de Comando, digite e executar esta linha:

    msbuild buildapp.csproj /t:HelloWorld
    
  4. Examine a saída.Você verá essas duas linhas (sua versão do.NET Framework pode diferir):

    Configuration is Debug
    MSBuildToolsPath is C:\Windows\Microsoft.NET\Framework\v4.0.20317
    
ObservaçãoObservação

Se você não vir essas linhas em seguida você tiver esquecido provavelmente salve o arquivo de projeto no editor de códigos.Salve o arquivo e tente novamente.

Dd393573.collapse_all(pt-br,VS.110).gifpropriedades condicionais

Muitas propriedades como a configuração são definidas condicional, isto é, o atributo de condição aparece no elemento de propriedade.As propriedades são definidas condicionais ou redefinidas somente se a condição avalia “true”.Observe que as propriedades indefinidas são fornecidas o valor padrão de uma cadeia de caracteres vazia.Por exemplo,

<Configuration   Condition=" '$(Configuration)' == '' ">Debug</Configuration>

significa “se a propriedade de configuração não foi definida, ainda não definem a e não oferecem “depuração de” valor”.

Quase todos os elementos do MSBuild podem ter um atributo de condição.Para mais discussão sobre o uso do atributo da condição, consulte Condições do MSBuild.

Dd393573.collapse_all(pt-br,VS.110).gifpropriedades reservados

MSBuild reserva alguns nomes de propriedade para armazenar informações sobre o arquivo de projeto e os binários de MSBuild .MSBuildToolsPath é um exemplo de uma propriedade reservado (novo em MSBuild 3,5).As propriedades reservados são referenciadas com a notação $ como qualquer outra propriedade.Para obter mais informações, consulte Como: referenciar o nome ou local do arquivo de projeto e MSBuild reservado propriedades.

Dd393573.collapse_all(pt-br,VS.110).gifVariáveis de ambiente

Você pode consultar variáveis de ambiente em arquivos de projeto a mesma maneira que as propriedades de compilação.Por exemplo, para usar a variável de ambiente PATH no arquivo de projeto, use $ caminho ().Se o projeto contém uma definição de propriedade que tenha o mesmo nome de uma variável de ambiente, a propriedade no projeto substitui o valor da variável de ambiente.Para obter mais informações, consulte Como: usar variáveis de ambiente em uma compilação.

Propriedades de configuração de linha de comando

As propriedades podem ser definidas na linha de comando usando a opção de linha de comando do /property ou /p.Valores de propriedade recebidos dos valores de propriedade de substituição de linha de comando definidos no arquivo e em variáveis de ambiente de projeto.

Para definir um valor de propriedade de linha de comando

  1. De Janela de Comando, digite e executar esta linha:

    msbuild buildapp.csproj /t:HelloWorld /p:Configuration=Release
    
  2. Examine a saída.Você deve ver esta linha:

    Configuration is Release.
    

MSBuild cria a propriedade de configuração e oferece o valor “versão”.

Caracteres Especiais

Certos caracteres têm significado especial em arquivos de projeto do MSBuild.Exemplos de esses caracteres incluem ponto-e-vírgula (;) e asteriscos (*).Para usar esses caracteres especiais como os literais em um arquivo de projeto, eles devem ser especificados usando a sintaxe %xx, onde xx representam o valor hexadecimal ASCII de caracteres.

Altere a tarefa de mensagem mostrar o valor de propriedade de configuração com caracteres especiais para torná-lo mais legível.

Para usar caracteres especiais na mensagem encarregue

  1. Editor de códigos de, substitua ambas as tarefas de mensagem com essa linha:

    <Message Text="%24(Configuration) is %22$(Configuration)%22" />
    
  2. Salve o arquivo de projeto.

  3. De Janela de Comando, digite e executar esta linha:

    msbuild buildapp.csproj /t:HelloWorld
    
  4. Examine a saída.Você deve ver esta linha:

    $(Configuration) is "Debug"
    

Para obter mais informações, consulte Caracteres especiais do MSBuild.

compilar itens

Um item é uma parte da informação, normalmente um nome de arquivo, que é usado como uma entrada ao sistema de compilação.Por exemplo, uma coleção de itens que representam arquivos de origem pode ser passada para uma tarefa chamada compila para criá-los em um assembly.

todos os itens são elementos filho de elementos de ItemGroup.O nome do item é o nome do elemento filho, e o valor do item é o valor do atributo incluir no elemento filho.Os valores dos itens com o mesmo nome são coletados em tipos de item com este nome.Por exemplo,

<ItemGroup>
    <Compile Include="Program.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>

define um grupo de item que contém dois itens.O tipo de item Compila tem dois valores: “Module.vb” e “propriedades AssemblyInfo.cs \”.

O código a seguir cria o mesmo tipo de item declarando ambos os arquivos em um inclui o atributo, separadas por ponto-e-vírgula.

<ItemGroup>
    <Compile Include="Program.cs;Properties\AssemblyInfo.cs" />
</ItemGroup>

Para obter mais informações, consulte Itens do MSBuild.

ObservaçãoObservação

Caminhos de arquivo são relativos a pasta que contém o arquivo de projeto do MSBuild.

Valores de verificação de tipo de item

Para obter os valores de um tipo de item, use a seguinte sintaxe ItemType, onde é o nome do tipo de item:

@(ItemType)

Use essa sintaxe para examinar o tipo de item compilar no arquivo de projeto.

Para examinar valores do tipo de item

  1. Editor de códigos de, substitua a tarefa de destino HelloWorld com esse código:

    <Target Name="HelloWorld">
      <Message Text="Compile item type contains @(Compile)" />
    </Target>
    
  2. Salve o arquivo de projeto.

  3. De Janela de Comando, digite e executar esta linha:

    msbuild buildapp.csproj /t:HelloWorld
    
  4. Examine a saída.Você deve ver esta longa linha:

    Compile item type contains Form1.cs;Form1.Designer.cs;Program.cs;Properties\AssemblyInfo.cs;Properties\Resources.Designer.cs;Properties\Settings.Designer.cs
    

Os valores de um tipo de item são separadas por ponto-e-vírgula por padrão.

Para alterar o separador de um tipo de item, use a seguinte sintaxe ItemType, onde é o tipo de item e separador é uma cadeia de caracteres de um ou mais caracteres separando se:

@(ItemType, Separator)

Altere a tarefa de mensagem usar retornos de carro e as alimentações de linha (%0A%0D) para exibir compilações os itens um linha por linha.

Para exibir os valores de um tipo de item por linha

  1. Editor de códigos de, substitua a tarefa de mensagem com essa linha:

    <Message Text="Compile item type contains @(Compile, '%0A%0D')" />
    
  2. Salve o arquivo de projeto.

  3. De Janela de Comando, digite e executar esta linha:

    msbuild buildapp.csproj /t:HelloWorld

  4. Examine a saída.Você verá essas linhas:

    Compile item type contains Form1.cs
    Form1.Designer.cs
    Program.cs
    Properties\AssemblyInfo.cs
    Properties\Resources.Designer.cs
    Properties\Settings.Designer.cs
    

Dd393573.collapse_all(pt-br,VS.110).gifInclua, excluir, e curingas

Você pode usar curingas “*”, “**,” e “?” com o atributo incluir para adicionar itens a um tipo de item.Por exemplo,

<Photos Include="images\*.jpeg" />

adicione todos os arquivos com a extensão de arquivo “.jpeg” na pasta imagens para o tipo de item de fotos, quando

<Photos Include="images\**.jpeg" />

adiciona todos os arquivos com a extensão de arquivo “.jpeg” na pasta imagens, e todas suas subpastas, o tipo de item de fotos.Para obter mais exemplos, consulte Como: selecione os arquivos para compilação.

Observe como os itens são declarados são adicionados ao tipo de item.Por exemplo,

<Photos Include="images\*.jpeg" />
<Photos Include="images\*.gif" />

cria um tipo de item nomeado Foto que contém todos os arquivos na pasta de imagens com um extensão de arquivo “.jpeg” de “ou” .gif.Isso é equivalente à seguinte linha:

<Photos Include="images\*.jpeg;images\*.gif" />

Você pode excluir um item de um tipo de item com o atributo de exclusão.Por exemplo,

<Compile Include="*.cs" Exclude="*Designer*">

adiciona todos os arquivos com a extensão de arquivo” .cs” para o tipo de item compilar, exceto para arquivos cujos nomes contenham a cadeia de caracteres “designer”.Para obter mais exemplos, consulte Como: excluir arquivos da compilação.

O atributo de exclusão afeta apenas os itens adicionados pelo atributo incluir no elemento de item que os contém ambos.Por exemplo,

<Compile Include="*.cs" />
<Compile Include="*.res" Exclude="Form1.cs">

não excluiria o arquivo Form1.cs, que foi adicionado no elemento acima do item.

para incluir e excluir itens

  1. Editor de códigos de, substitua a tarefa de mensagem com essa linha:

    <Message Text="Compile item type contains @(XFiles)" />
    
  2. Adicione esse grupo de itens imediatamente após o elemento de importação:

    <ItemGroup>
       <XFiles Include="*.cs;properties/*.resx" Exclude="*Designer*" />
    </ItemGroup>
    
  3. Salve o arquivo de projeto.

  4. De Janela de Comando, digite e executar esta linha:

    msbuild buildapp.csproj /t:HelloWorld
    
  5. Examine a saída.Você deve ver esta linha:

    Compile item type contains Form1.cs;Program.cs;Properties/Resources.resx
    

Metadados de item

Itens podem conter metadados além das informações obtidas incluir atributos e excluir.Esses metadados podem ser usados pelas tarefas que exigem mais informações sobre itens do que apenas o valor do item.

Os metadados de item são declarados no arquivo de projeto criando um elemento com o nome de metadados como um filho do item.Um item pode ter zero ou mais valores de metadados.Por exemplo, o seguinte item de CSFile tem metadados de cultura com um valor de “fr”:

<ItemGroup>
    <CSFile Include="main.cs">
        <Culture>Fr</Culture>
    </CSFile>
</ItemGroup>

Para obter o valor de metadados de um tipo de item, use a seguinte sintaxe ItemType, onde é o nome do tipo de item e MetaDataName é o nome de metadados:

%(ItemType.MetaDataName)

Para examinar metadados de item

  1. Editor de códigos de, substitua a tarefa de mensagem com essa linha:

    <Message Text="Compile.DependentUpon: %(Compile.DependentUpon)" />
    
  2. Salve o arquivo de projeto.

  3. De Janela de Comando, digite e executar esta linha:

    msbuild buildapp.csproj /t:HelloWorld
    
  4. Examine a saída.Você verá essas linhas:

    Compile.DependentUpon:
    Compile.DependentUpon: Form1.cs
    Compile.DependentUpon: Resources.resx
    Compile.DependentUpon: Settings.settings
    

Observe como a frase “Compile.DependentUpon” aparece várias vezes.O uso de metadados com essa sintaxe em um destino causa “em lotes”.Em lotes significa que as tarefas de destino são executadas dentro uma vez para cada valor exclusivo de metadados.Este é o equivalente de script MSBuild de compilação de programação comuns de loop “for”.Para obter mais informações, consulte Processamento em lotes do MSBuild.

Dd393573.collapse_all(pt-br,VS.110).gifmetadados conhecidos

Sempre que um item é adicionado a uma lista de itens, o item é atribuído alguns metadados conhecidos.Por exemplo, nome de arquivo (%) retorna o nome de arquivo do item.Para obter uma lista completa de metadados conhecidos, consulte MSBuild bem conhecidas metadados de Item.

para examinar metadados conhecidos

  1. Editor de códigos de, substitua a tarefa de mensagem com essa linha:

    <Message Text="Compile Filename: %(Compile.Filename)" />
    
  2. Salve o arquivo de projeto.

  3. De Janela de Comando, digite e executar esta linha:

    msbuild buildapp.csproj /t:HelloWorld
    
  4. Examine a saída.Você verá essas linhas:

    Compile Filename: Form1
    Compile Filename: Form1.Designer
    Compile Filename: Program
    Compile Filename: AssemblyInfo
    Compile Filename: Resources.Designer
    Compile Filename: Settings.Designer
    

Comparando os dois exemplos anteriores, você pode ver que quando não cada item no tipo de item tem compilar metadados de DependentUpon, todos os itens têm metadados conhecidos de nome de arquivo.

Dd393573.collapse_all(pt-br,VS.110).gifTransformações de metadados

As listas de item podem ser transformadas em novos listas de item.Para transformar uma lista de itens, use a seguinte sintaxe ItemType, onde é o nome do tipo de item e MetadataName é o nome de metadados:

@(ItemType -> '%(MetadataName)')

Por exemplo, uma lista de itens de arquivos de origem pode ser transformada em uma coleção de arquivos de objeto usando uma expressão como @(SourceFiles -> '%(Filename).obj').Para obter mais informações, consulte Transformações do MSBuild.

para transformar itens usando metadados

  1. Editor de códigos de, substitua a tarefa de mensagem com essa linha:

    <Message Text="Backup files: @(Compile->'%(filename).bak')" />
    
  2. Salve o arquivo de projeto.

  3. De Janela de Comando, digite e executar esta linha:

    msbuild buildapp.csproj /t:HelloWorld
    
  4. Examine a saída.Você deve ver esta linha:

    Backup files: Form1.bak;Form1.Designer.bak;Program.bak;AssemblyInfo.bak;Resources.Designer.bak;Settings.Designer.bak
    

Observe que os metadados expressos em esta sintaxe não causam em lotes.

O que mais?

Para saber como criar um passo de cada vez que um arquivo de projeto simples, tente Passo a passo: Criando um arquivo de projeto MSBuild a partir do zero.

Consulte também

Outros recursos

MSBuild

Referência do MSBuild