Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O Visual Studio aloja o MSBuild para carregar e construir projetos geridos. Como o MSBuild é responsável pelo projeto, quase qualquer projeto no formato MSBuild pode ser usado com sucesso no Visual Studio, mesmo que o projeto tenha sido criado por uma ferramenta diferente e tenha um processo de construção personalizado.
Este artigo descreve aspetos específicos do alojamento MSBuild do Visual Studio que devem ser considerados ao personalizar projetos e ficheiros .targets que pretende carregar e construir no Visual Studio. Estes vão ajudar-te a garantir que funcionalidades do Visual Studio como o IntelliSense e a depuração funcionam para o teu projeto personalizado.
Para informações sobre projetos em C++, consulte Ficheiros de projeto.
Extensões de nomes de ficheiros de projeto
MSBuild.exe reconhece qualquer extensão de nome de ficheiro de projeto que corresponda ao padrão .*proj. No entanto, o Visual Studio reconhece apenas um subconjunto destas extensões de nomes de ficheiros de projeto, que determinam o sistema de projeto específico da linguagem que irá carregar o projeto. O Visual Studio não tem um sistema de projeto baseado em MSBuild e neutro em termos de linguagem.
Por exemplo, o sistema de projetos C# carrega ficheiros .csproj , mas o Visual Studio não consegue carregar um ficheiro .xxproj . Um ficheiro de projeto para ficheiros fonte numa linguagem arbitrária deve usar a mesma extensão que ficheiros de projeto Visual Basic ou C# para ser carregado no Visual Studio.
Em alternativa, é suportada a extensão *.msbuildproj.
Nomes-alvo bem conhecidos
Clicar no comando Build no Visual Studio executará o alvo predefinido no projeto. Frequentemente, este alvo também é chamado Build. Escolher os comandos Rebuild ou Clean tentará executar um alvo com o mesmo nome no projeto.
Clicar em Publicar executará um alvo nomeado PublishOnly no projeto.
Configurações e plataformas
As configurações são representadas nos projetos MSBuild por propriedades agrupadas num PropertyGroup elemento que contém um Condition atributo. O Visual Studio analisa estas condições para criar uma lista de configurações de projetos e plataformas a exibir. Para extrair com sucesso esta 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' "
O Visual Studio analisa as condições sobre PropertyGroup, ItemGroup, Import, propriedade e elementos de item para este propósito.
Ações adicionais de construção
O Visual Studio permite alterar o nome do tipo de item de um ficheiro num projeto com a propriedade Build Action da janela de propriedades do ficheiro . Os nomes dos tipos de item Compile, EmbeddedResource, Content e None estão sempre listados neste menu, juntamente com quaisquer outros nomes de tipos de item no seu projeto. Para garantir que quaisquer nomes de tipos de itens personalizados estejam sempre disponíveis neste menu, pode adicionar os nomes a um tipo de item chamado AvailableItemName. Por exemplo, adicionar o seguinte ao seu ficheiro de projeto adicionará o tipo personalizado JScript a este menu para todos os projetos que o importam:
<ItemGroup>
<AvailableItemName Include="JScript"/>
</ItemGroup>
Adicionar nomes de tipos de itens a esse AvailableItemName tipo fará com que itens desse tipo apareçam no Explorador de Soluções.
Observação
Alguns nomes de tipos de itens são especiais para o Visual Studio mas não estão listados neste menu suspenso.
Compiladores em processo
Sempre que possível, o Visual Studio tentará usar a versão em processo do compilador Visual Basic para aumentar o desempenho. (Não aplicável a C#.) Para que isto funcione corretamente, as seguintes condições devem ser cumpridas:
Num alvo do projeto, deve haver uma tarefa nomeada
Vbcpara projetos em Visual Basic.O
UseHostCompilerIfAvailableparâmetro da tarefa deve ser definido como verdadeiro.
IntelliSense em tempo de projeto
Para obter suporte a IntelliSense no Visual Studio antes de a compilação produzir uma assembly de saída, devem ser cumpridas as seguintes condições:
Deve existir um alvo chamado
Compile.Quer o
Compilealvo, quer uma das suas dependências, deve chamar a tarefa do compilador para o projeto, comoCscouVbc.Quer o
Compilealvo, quer uma das suas dependências, devem garantir que o compilador receba todos os parâmetros necessários para o IntelliSense, especialmente todas as referências.As condições listadas na secção de compiladores em processo devem ser cumpridas.
Construir soluções
No Visual Studio, a ordem dos ficheiros de solução e da construção do projeto são controladas pelo próprio Visual Studio. Ao construir uma solução com msbuild.exe na linha de comandos, o MSBuild analisa o ficheiro da solução e ordena que o projeto seja construído. Em ambos os casos, os projetos são construídos individualmente por ordem de dependência, e as referências entre projetos não são seguidas. Em contraste, quando projetos individuais são construídos com msbuild.exe, as referências de projeto para projeto são percorridas.
Ao construir dentro do Visual Studio, a propriedade $(BuildingInsideVisualStudio) é definida para true. Isto pode ser usado no teu projeto ou nos ficheiros .targets para fazer com que a build se comporte de forma diferente.
Propriedades e itens de exibição
O Visual Studio reconhece certos nomes e valores de propriedades. Por exemplo, a seguinte propriedade num projeto fará com que a Aplicação Windows apareça na caixa de Tipo de Aplicação no Project Designer.
<OutputType>WinExe</OutputType>
O valor da propriedade pode ser editado no Project Designer e guardado no ficheiro do projeto. Se tal propriedade receber um valor inválido por edição manual, o Visual Studio mostrará um aviso quando o projeto for carregado e substituirá o valor inválido por um valor padrão.
O Visual Studio compreende os valores predefinidos de algumas propriedades. Estas propriedades não serão mantidas no ficheiro do projeto a menos que tenham valores não padrão.
Propriedades com nomes arbitrários não são exibidas no Visual Studio. Para modificar propriedades arbitrárias no Visual Studio, deve abrir o ficheiro do projeto no editor XML e editá-los manualmente. Para mais informações, consulte a secção Editar ficheiros de projeto no Visual Studio mais adiante neste tópico.
Os itens definidos no projeto com nomes arbitrários de tipos de itens são exibidos por padrão no Explorador de Soluções sob o nó correspondente do projeto. Para ocultar um item da visualização, defina os Visible metadados para false. Por exemplo, o seguinte item participará no processo de construção, mas não será apresentado no Explorador de Soluções.
<ItemGroup>
<IntermediateFile Include="cache.temp">
<Visible>false</Visible>
</IntermediateFile>
</ItemGroup>
Observação
Os Visible metadados são ignorados pelo Explorador de Soluções para projetos C++. Os itens serão sempre mostrados mesmo que Visible estejam definidos como falsos.
Os itens declarados em ficheiros importados para o projeto não são apresentados por defeito. Os itens criados durante o processo de compilação nunca são exibidos no Explorador de Soluções.
Condições sobre itens e propriedades
Durante uma construção, todas as condições são totalmente respeitadas.
Ao determinar valores de propriedades a exibir, propriedades que o Visual Studio considera dependentes da configuração são avaliadas de forma diferente das propriedades que considera independentes da configuração. Para propriedades que considera dependentes da configuração, o Visual Studio define as Configuration propriedades e Platform adequadamente e instrui o MSBuild a reavaliar o projeto. Para propriedades que considera independentes da configuração, é indeterminado como as condições serão avaliadas.
Expressões condicionais nos itens são sempre ignoradas para efeitos de decidir se o item deve ser apresentado no Explorador de Soluções.
Debugging
Para encontrar e lançar o assembly de saída e anexar o depurador, o Visual Studio precisa das propriedades OutputPath, AssemblyName e OutputType corretamente definidas. O depurador falhará em anexar se o processo de compilação não tiver feito com que o compilador gerasse um ficheiro .pdb .
Execução alvo em tempo de projeto
O Visual Studio tenta executar alvos com certos nomes quando carrega um projeto. Estes alvos incluem Compile, ResolveAssemblyReferences, ResolveCOMReferences, GetFrameworkPaths, e CopyRunEnvironmentFiles. O Visual Studio executa estes alvos para que o compilador possa ser inicializado para fornecer IntelliSense, o depurador possa ser inicializado e as referências exibidas no Explorador de Soluções possam ser resolvidas. Se estes alvos não estiverem presentes, o projeto carregará e compilará corretamente, mas a experiência na fase de design no Visual Studio não será totalmente funcional.
Editar ficheiros de projeto no Visual Studio
Para editar diretamente um projeto MSBuild, pode abrir o ficheiro do projeto no editor XML do Visual Studio.
Para descarregar e editar um ficheiro de projeto no Visual Studio
No Explorador de Soluções, clique com o botão direito no nó do projeto e depois escolha Descarregar o Projeto.
O projeto está marcado como indisponível.
No Explorador de Soluções, clique com o botão direito no nó do projeto indisponível e depois escolha Editar <Ficheiro> do Projeto.
O ficheiro do projeto abre no Editor XML do Visual Studio.
Editar, guardar e depois fechar o ficheiro do projeto.
No Explorador de Soluções, clique com o botão direito no nó do projeto indisponível e depois escolha Recarregar o Projeto.
IntelliSense e validação
Ao usar o editor XML para editar ficheiros de projeto, o IntelliSense e a validação são gerados pelos ficheiros de esquema do MSBuild. Estes estão instalados na cache de esquemas, que pode ser encontrada no <diretório> de instalação do Visual Studio\Xml\Schemas\1033\MSBuild.
Os tipos principais do MSBuild são definidos no Microsoft.Build.Core.xsd e os tipos comuns usados pelo Visual Studio são definidos no Microsoft.Build.CommonTypes.xsd. Para personalizar os esquemas de forma a ter IntelliSense e validação para nomes customizados de tipos de itens, propriedades e tarefas, pode editar o Microsoft.Build.xsd ou criar o seu próprio esquema que inclua os esquemas CommonTypes ou Core. Se criares o teu próprio esquema, terás de direcionar o editor XML para o encontrar usando a janela de Propriedades .
Editar ficheiros de projeto carregados
O Visual Studio armazena em cache o conteúdo dos ficheiros do projeto e dos ficheiros importados pelos ficheiros do projeto. Se editar um ficheiro de projeto carregado, o Visual Studio irá automaticamente pedir-lhe para recarregar o projeto para que as alterações tenham efeito. No entanto, se editar um ficheiro importado por um projeto carregado, não haverá um prompt de recarregamento e terá de descarregar e recarregar manualmente o projeto para que as alterações tenham efeito.
Grupos de saída
Vários alvos definidos em Microsoft.Common.targets têm nomes que terminam em OutputGroups ou OutputGroupDependencies. O Visual Studio chama estes alvos para obter listas específicas dos resultados dos projetos. Por exemplo, o SatelliteDllsProjectOutputGroup destino gera uma lista de todos os conjuntos de satélites que uma compilação criará. Estes grupos de saída são usados por funcionalidades como publicação, implementação e referências de projeto para projeto. Projetos que não os definem vão carregar e compilar no Visual Studio, mas algumas funcionalidades podem não funcionar corretamente.
Resolução de referência
A resolução de referência é o processo de usar os itens de referência armazenados num ficheiro de projeto para localizar montagens reais. O Visual Studio deve ativar a resolução de referência para mostrar propriedades detalhadas de cada referência na janela de Propriedades . A lista seguinte descreve os três tipos de referências e como são resolvidas.
Referências da assembleia:
O sistema do projeto chama um alvo com o nome bem conhecido
ResolveAssemblyReferences. Este alvo deve produzir itens do tipo de item com o nomeReferencePath. Cada um destes itens deve ter uma especificação do item (o valor doIncludeatributo de um item) contendo o caminho completo até à referência. Os itens devem ter todos os metadados dos itens de entrada, transmitidos, além de incorporar os seguintes novos metadados:CopyLocal, indicando se a assemblagem deve ser copiada para a pasta de saída, definido como verdadeiro ou falso.OriginalItemSpec, contendo a especificação original do item da referência.ResolvedFrom, definido como "{TargetFrameworkDirectory}" se tenha sido resolvido a partir do diretório do .NET Framework.
Referências COM:
O sistema do projeto chama um alvo com o nome
ResolveCOMReferencesbem conhecido . Esta meta deve produzir itens com o nome do tipo de itemComReferenceWrappers. Cada um destes itens deve ter uma especificação contendo o caminho completo até ao conjunto de interoperabilidade para a referência COM. Os itens devem ter todos os metadados transferidos dos itens de entrada, além de novos metadados com o nomeCopyLocal, determinando se o assembly deve ser copiado para a pasta de saída, estabelecendo se é verdadeiro ou falso.Referências nativas
O sistema do projeto chama um alvo com o nome
ResolveNativeReferencesbem conhecido . Este alvo deve produzir itens do tipo de item com o nomeNativeReferenceFile. Os itens devem ter todos os metadados dos itens de entrada transferidos, além de um novo metadado chamadoOriginalItemSpec, contendo a especificação original do item da referência.
Atalhos de desempenho
Se usar o Visual Studio IDE para iniciar a depuração (seja escolhendo a tecla F5 ou escolhendo Debug>Start Debugging na barra de menu) ou para construir o seu projeto (por exemplo, Build>Build Solution), o processo de compilação utiliza uma verificação rápida de atualização para melhorar o desempenho. Em alguns casos, em que builds personalizadas criam ficheiros que são construídos por sua vez, a verificação rápida de atualizações não identifica corretamente os ficheiros alterados. Projetos que precisam de verificações de atualização mais detalhadas podem desativar a verificação rápida definindo a variável DISABLEFASTUPTODATECHECK=1de ambiente . Alternativamente, os projetos podem definir isto como uma propriedade do MSBuild no projeto ou num ficheiro que o projeto importa.