Visual Studio Integração (MSBuild)

Visual Studio 2005hosts MSBuild para carregar e compilar gerenciado projetos. Porque MSBuild é responsável pelo projeto, quase qualquer projeto na MSBuild formato pode ser usado com êxito em Visual Studio, mesmo se o projeto foi criado por uma ferramenta diferente e tem personalizado para criar o processo.

Este tópico descreve os aspectos específicos da Visual Studiodo MSBuild hospedagem que deve ser considerado ao personalizar os projetos e arquivos. targets que você deseja carregar e compilar Visual Studio. Isso irá ajudá-lo a Certifique-se de Visual Studio recursos como IntelliSense e a depuração de trabalho para seu projeto personalizado.

Extensões de nome de arquivo de projeto

MSBuild. exe reconhece qualquer extensão de nome de arquivo de projeto correspondentes ao padrão. * proj. No entanto, Visual Studio reconhece apenas um subconjunto dessas extensões de nome de arquivo de projeto, que determinam o sistema de projetos específicos de linguagem que carregará o projeto. Visual Studionão tem uma linguagem neutra MSBuild com base no sistema de projeto.

Por exemplo, o Visual C# o sistema de projeto carrega arquivos. csproj, mas Visual Studio não consegue carregar um arquivo .xxproj. Um arquivo de projeto para os arquivos de origem em uma linguagem arbitrário deve usar a mesma extensão Visual Basic ou Visual C# arquivos de projeto para ser carregado na Visual Studio.

Nomes conhecidos de destino

Clicando no Build comando no Visual Studio executará o destino padrão no projeto. Geralmente, este destino também é chamado Build. Escolhendo o reconstruir ou Limpar comando tentará executar um destino de mesmo nome no projeto. Clicando em Publicar executará um destino chamado PublishOnly no projeto.

Configurações e plataformas

As configurações são representadas em MSBuild projetos pelas propriedades agrupadas em um PropertyGroup elemento que contém um Condition atributo. Visual Studioexamina essas condições para criar uma lista de configurações de projeto e plataformas para exibir. Para extrair com sucesso essa lista, as condições devem ter um formato semelhante ao seguinte:

Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "
Condition=" '$(Configuration)' == 'Release' " 
Condition=" '$(Something)|$(Configuration)|$(SomethingElse)' == 'xxx|Debug|yyy' "

Visual Studioexamina as condições PropertyGroup, ItemGroup, Import, propriedade e os elementos de item para essa finalidade.

Ações adicionais de compilação

Visual Studiopermite que você altere o nome do tipo de item de um arquivo em um projeto com o Build Action propriedade da Propriedades de Arquivo janela. Compile, EmbeddedResource, Content, e None nomes de tipo de item são sempre listados nesse menu, juntamente com quaisquer outros nomes de tipo de item já está em seu projeto. Para garantir que os nomes de tipo de item personalizado estão sempre disponíveis nesse menu, você pode adicionar os nomes a um tipo de item chamado AvailableItemName. Por exemplo, adicionando o seguinte ao seu arquivo de projeto irá adicionar o tipo personalizado JScript a esse menu para todos os projetos que importá-lo:

<ItemGroup>
    <AvailableItemName Include="JScript"/>
</ItemGroup>
ObservaçãoObservação

Alguns nomes de tipo de item são especiais para Visual Studio , mas não aparecer na lista suspensa.

Compiladores de processo

Quando possível, Visual Studio tentará usar as versões em processo de Visual Basic ou Visual C# compiladores para maior desempenho. Para que isso funcione corretamente, as seguintes condições devem ser atendidas:

  • Em um destino do projeto, deve haver uma tarefa denominada Csc (para Visual C# projetos) ou Vbc (para Visual Basic projetos)

  • O UseHostCompilerIfAvailable parâmetro da tarefa deve ser definido como true.

  • Suporte somente devem ser especificados os valores de parâmetro. Todos os parâmetros especificados na tarefa são suportados pelo compilador em processo, mas alguns valores de parâmetro não são suportados. O seguinte Csc não há suporte para valores de parâmetro de tarefa do Visual C# compilador em processo:

    • NoConfig: falsee os valores vazios não são suportados.

    • ResponseFiles: valores não vazios não são suportados.

    • AdditionalLibPaths: valores não vazios não são suportados.

    • AddModules: valores não vazios não são suportados.

    • CodePage: Não há suporte para valores diferentes de zero.

    • GenerateFullPaths: truenão é suportado.

    • LinkResources: valores não vazios não são suportados.

Se essas condições não forem atendidas, o projeto será compilado usando o compilador de linha de comando em vez do compilador em processo.

IntelliSense de tempo de design

Para obter suporte de IntelliSense em Visual Studio antes de uma compilação gerou um assembly de saída, as seguintes condições devem ser atendidas:

  • Deve haver um destino chamado Compile.

  • Tanto o Compile uma de suas dependências ou de destino deve chamar a tarefa de compilador para o projeto, como Csc ou Vbc.

  • Tanto o Compile destino ou uma de suas dependências deve fazer com que o compilador receber todos os parâmetros necessários para IntelliSense, especialmente todas as referências.

  • Condições listadas nos compiladores"no processo" seção deve ser atendida.

Construindo soluções

Dentro de Visual Studio, o arquivo de solução e a ordem de compilação do projeto são controladas por Visual Studio próprio. Ao criar uma solução com o MSBuild. exe na linha de comando, MSBuild analisa o arquivo de solução e ordena as compilações do projeto. Em ambos os casos os projetos são construídos individualmente em ordem de dependência e referências de projeto para o projeto não são partilhadas. Por outro lado, quando os projetos individuais são criados com o MSBuild. exe, são partilhadas com referências de projeto a projeto.

Quando estiver criando dentro de Visual Studio, a propriedade $(BuildingInsideVisualStudio) for definido como true. Isso pode ser usado em seus arquivos de projeto ou. targets para fazer com que a compilação se comporte de maneira diferente.

Exibir propriedades e itens

Visual Studioreconhece certos nomes de propriedades e valores. Por exemplo, a propriedade a seguir em um projeto fará com que Windows Application apareça no O tipo de aplicativo caixa no Project Designer.

<OutputType>WinExe</OutputType>

O valor da propriedade pode ser editado no Project Designer e salvas no arquivo de projeto. Se essa propriedade for fornecida um valor inválido, editando de mão, Visual Studio mostrará um aviso quando o projeto é carregado e substitua o valor inválido com um valor padrão.

Visual Studiocompreende os padrões de algumas propriedades. Essas propriedades não serão persistentes no arquivo de projeto, a menos que tenham valores não padrão.

Propriedades com nomes arbitrários não são exibidas em Visual Studio. Para modificar as propriedades arbitrárias em Visual Studio, você deve abrir o arquivo de projeto no editor XML e editá-los pela mão. Para obter mais informações, consulte How to: Edit Project Files.

Itens definidos no projeto com os nomes de tipo de item arbitrário são por padrão, exibido no Solution Explorer sob o nó do projeto. Para ocultar um item da exibição, defina a Visible metadados para false. Por exemplo, o seguinte item participarão no processo de compilação, mas não ser exibido no Solution Explorer.

<ItemGroup>
    <IntermediateFile Include="cache.temp">
        <Visible>false</Visible>
    </IntermediateFile>
</ItemGroup>

Itens declarados em arquivos importados para o projeto não são exibidas por padrão. Itens criados durante o processo de compilação nunca são exibidos no Solution Explorer.

Condições de itens e propriedades

Durante uma compilação, todas as condições totalmente são respeitadas.

Ao determinar os valores de propriedade para exibir, propriedades que Visual Studio considera dependente da configuração são avaliadas de maneira diferente de propriedades, ele considera independente da configuração. Para propriedades considera configuração dependente, Visual Studio define o Configuration e Platform propriedades adequadamente e instrui MSBuild para reavaliar o projeto. Para propriedades considera configuração independente é indeterminado como condições serão avaliadas.

Expressões condicionais em itens são sempre ignoradas para fins de decidir se o item deve ser exibido no Solution Explorer.

Debug

Para localizar e iniciar o assembly de saída e anexar o depurador, Visual Studio precisa as propriedades OutputPath, AssemblyName, e OutputType definido corretamente. O depurador não conseguirá conectar-se o processo de compilação não fazer com que o compilador gere um arquivo. PDB.

Design em tempo de execução de destino

Visual Studiotenta executar destinos com determinados nomes quando ele carrega um projeto. These targets include Compile, ResolveAssemblyReferences, ResolveCOMReferences, GetFrameworkPaths, and CopyRunEnvironmentFiles. Visual Studioexecuta esses destinos para que o compilador pode ser inicializado para fornecer IntelliSense, o depurador pode ser inicializado e referências exibidas no Solution Explorer podem ser resolvidas. Se esses destinos não estiverem presentes, o projeto será carregar e compilar corretamente, mas a experiência de tempo de design no Visual Studio não será totalmente funcional.

Editando arquivos do projeto em Visual Studio

Quando é necessário editar um MSBuild de projeto diretamente, você pode abrir o arquivo de projeto a Visual Studio editor de XML. Para obter mais informações, consulte How to: Edit Project Files.

Validação e IntelliSense

Ao usar o editor de XML para editar arquivos de projeto, validação e IntelliSense é orientado pela MSBuild arquivos de esquema. Eles são instalados por Visual Studio no cache do esquema, que podem ser encontradas na [Visual Studio o local de instalação] \Xml\Schemas pasta.

O núcleo MSBuild tipos são definidos no Microsoft.Build.Core.xsd e tipos comuns usados por Visual Studio são definidos em Microsoft.Build.CommonTypes.xsd. Para personalizar os esquemas para que você tenha a IntelliSense e a validação para nomes de tipo de item personalizados, propriedades e tarefas, Microsoft.Build.xsd de editar ou criar seu próprio esquema que inclui os esquemas de núcleo ou de CommonTypes. Se você criar seu próprio esquema, você terá para direcionar o XML editor para encontrá-lo usando o Propriedades janela.

Editando os arquivos carregados do projeto

Visual Studioarmazena em cache o conteúdo dos arquivos de projeto e importado por arquivos de projeto. Se você editar um arquivo de projeto carregado, Visual Studio automaticamente solicitará que você recarregar o projeto para que as alterações tenham efeito. No entanto se você editar um arquivo importado por um projeto carregado, não haverá nenhum prompt recarregar e é necessário descarregar e recarregar o projeto manualmente para fazer com que as alterações tenham efeito.

Grupos de saída

Vários destinos definidos no Microsoft.Common.targets têm nomes que terminam em OutputGroups ou OutputGroupDependencies. Visual Studiochama esses destinos para obter listas específicas das saídas de projeto. Por exemplo, o SatelliteDllsProjectOutputGroup destino cria uma lista de todos os assemblies satélites criará uma compilação. Esses grupos de saída são usados por recursos como referências de projeto para projeto, implantação e publicação. Projetos que não defini-los carregará e construir Visual Studio, mas alguns recursos podem não funcionar corretamente.

Resolução de referência

Resolução de referência é o processo de usar os itens de referência armazenados em um arquivo de projeto para localizar assemblies reais. Visual Studiodeve acionar a resolução de referência para mostrar propriedades detalhadas para cada referência a Propriedades janela. A lista a seguir descreve os três tipos de referências e como eles são resolvidos.

  • Referências de assembly:

    O sistema de projeto chama um destino com o nome conhecido ResolveAssemblyReferences. Este destino deve produzir itens com o nome do tipo de item ReferencePath. Cada um desses itens deve ter uma especificação de item (o valor da Include o atributo de um item) que contém o caminho completo para referência. Os itens devem ter todos os metadados dos itens de entrada passada além, para os novos metadados a seguir:

    • CopyLocal, indicando se o assembly deve ser copiado para a pasta de saída, defina como verdadeiro ou falso.

    • OriginalItemSpec, que contém a especificação do item original da referência.

    • ResolvedFrom, definido como "{TargetFrameworkDirectory}" Se fosse resolvido a partir de .NET Framework directory.

  • Referências COM:

    O sistema de projeto chama um destino com o nome conhecido ResolveCOMReferences. Este destino deve produzir itens com o nome do tipo de item ComReferenceWrappers. Cada um desses itens deve ter uma especificação de item que contém o caminho completo para o assembly de interoperabilidade para a referência de COM. Os itens devem ter todos os metadados dos itens de entrada passado através de, além disso, aos novos metadados com o nome CopyLocal, indicando se o assembly deve ser copiado para a pasta de saída, defina como verdadeiro ou falso

  • Referências nativas

    O sistema de projeto chama um destino com o nome conhecido ResolveNativeReferences. Este destino deve produzir itens com o nome do tipo de item NativeReferenceFile. Os itens devem ter todos os metadados dos itens de entrada passou, além de para uma nova peça de metadados nomeado OriginalItemSpec, que contém a especificação original do item de referência.

Atalhos de desempenho

Em Visual Studio, o processo de compilação usa uma verificação de atualização rápida para melhorar o desempenho. Em alguns casos onde compilações personalizadas criam arquivos obtém criados por sua vez, a verificação de atualização rápida não identifica corretamente os arquivos alterados. Projetos que precisam de verificações de atualização mais completa podem desativar a verificação rápida, definindo a variável de ambiente DISABLEFASTUPTODATECHECK=1. Como alternativa, os projetos podem definir isso como uma propriedade do MSBuild no projeto ou em um arquivo de que projeto importa.

Consulte também

Referência

Elemento de item (MSBuild)

Elemento de propriedade (MSBuild)

Elemento de destino (MSBuild)

CSC tarefa

Tarefa de Vbc

Outros recursos

MSBuild Concepts