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.
Os procedimentos a seguir podem ajudá-lo a diagnosticar problemas de compilação em seu projeto do Visual Studio e, se necessário, criar um log para enviar à Microsoft para investigação.
Um valor de propriedade é ignorado
Se uma propriedade de projeto aparecer definida como um valor específico, mas a propriedade não tiver efeito na compilação, siga estas etapas:
Abra o prompt de comando do Visual Studio Developer que corresponde à sua versão do Visual Studio.
Execute o seguinte comando, depois de substituir os valores para o caminho da solução, configuração e nome do projeto:
MSBuild /p:SolutionDir="c:\MySolutionDir\";Configuration="MyConfiguration";Platform="Win32" /pp:out.xml MyProject.vcxprojEste comando produz um ficheiro de projeto MSBuild "pré-processado" (out.xml). Você pode pesquisar esse arquivo por uma propriedade específica para ver onde ele está definido.
A última definição de um imóvel é o que a construção consome. Se a propriedade for definida duas vezes, o segundo valor substituirá o primeiro. Além disso, o MSBuild avalia o projeto em várias passagens:
- Grupos de Propriedades e Importações
- ItemDefinitionGroups
- Grupos de Itens
- Targets
Portanto, dada a seguinte ordem:
<PropertyGroup>
<MyProperty>A</MyProperty>
</PropertyGroup>
<ItemGroup>
<MyItems Include="MyFile.txt"/>
</ItemGroup>
<ItemDefinitionGroup>
<MyItems>
<MyMetadata>$(MyProperty)</MyMetadata>
</MyItems>
</ItemDefinitionGroup>
<PropertyGroup>
<MyProperty>B</MyProperty>
</PropertyGroup>
O valor de MyMetadata para o item MyFile.txt é avaliado como B durante a construção (não A e não vazio).
A compilação incremental está compilando mais do que deveria.
Se o MSBuild estiver reconstruindo desnecessariamente um projeto ou item de projeto, crie um log de compilação detalhado ou binário. Você pode pesquisar no log o arquivo que foi gerado ou compilado desnecessariamente. A saída é mais ou menos assim:
Task "CL"
Using cached input dependency table built from:
F:\test\Project1\Project1\Debug\Project1.tlog\CL.read.1.tlog
Outputs for F:\TEST\PROJECT1\PROJECT1\PROJECT1.CPP:
F:\TEST\PROJECT1\PROJECT1\DEBUG\PROJECT1.OBJ
Project1.cpp will be compiled because F:\TEST\PROJECT1\PROJECT1\PROJECT1.H was modified at 6/5/2019 12:37:09 PM.
Outputs for F:\TEST\PROJECT1\PROJECT1\PROJECT1.CPP:
F:\TEST\PROJECT1\PROJECT1\DEBUG\PROJECT1.OBJ
Write Tracking Logs:
Debug\Project1.tlog\CL.write.1.tlog
Se estiver a desenvolver no IDE do Visual Studio (com a informação detalhada da janela de saída), a janela de saída exibirá o motivo pelo qual cada projeto não está atualizado.
1>------ Up-To-Date check: Project: Project1, Configuration: Debug Win32 ------
1>Project is not up-to-date: build input 'f:\test\project1\project1\project1.h' was modified after the last build finished.
Criar um registo detalhado
- Abra o painelOpções de> e expanda a seção Todas as configurações>,Projetos e Soluções>,Criar e Executar.
- Abra a caixade diálogo Opções de > e expanda a seção Projetos e Soluções>Criar e Executar.
Use as listas suspensas e defina as opções de verbosidade de saída de compilação do projeto MSBuild e verbosidade do arquivo de log de compilação do projeto MSBuild como Detalhada.
O primeiro controla a verbosidade da compilação na janela de saída e o segundo controla a
{projectname}.logverbosidade da compilação no arquivo que é criado no diretório intermediário de cada projeto durante a compilação.Em um prompt de comando do desenvolvedor do Visual Studio, insira um destes comandos, substituindo o caminho real e os valores de configuração:
MSBuild /p:Configuration="MyConfiguration";Platform="x86" /fl MySolution.slnou
MSBuild /p:/p:SolutionDir="c:\MySolutionDir\";Configuration="MyConfiguration";Platform="Win32" /fl MyProject.vcxprojUm
MSBuild.logarquivo é criado no diretório que você executou o MSBuild.
Solicitar os logs binários do MSBuild para investigação
MSBuild tem a capacidade de capturar um arquivo de log binário detalhado. Se você estiver tendo um problema de compilação e for capaz de fornecer um log binário, o log pode ser útil para investigar o problema.
No entanto, você deve estar ciente de que tipo de informação é capturada no log binário para se certificar de que você não está inadvertidamente compartilhando mais do que você pretende. O log binário captura quase tudo o que sua compilação faz, incluindo o conteúdo de seus arquivos de projeto e quaisquer arquivos (como .props e .targets) que eles importam, todas as tarefas que são executadas durante a compilação, bem como a entrada e saída, bem como variáveis de ambiente que foram acessadas nessa sessão do MSBuild. Ele geralmente não inclui o conteúdo dos arquivos de origem que são compilados, mas captura seus nomes completos e caminhos.
Observação
Alguns ambientes de compilação disponibilizam segredos usando variáveis de ambiente. Antes de compartilhar um log binário, certifique-se de que ele não exponha tokens de API ou outros segredos importantes.
Capturar logs binários para compilações de linha de comando
Você pode criar um log binário passando o -bl parâmetro para MSBuild (MSBuild.exe ou dotnet build). Você pode explorar o conteúdo do arquivo gerado .binlog usando o MSBuild Structured Log Viewer ou em seu navegador usando o Live Structured Log Viewer. O MSBuild não captura dados de logs binários visualizados no seu navegador.
Examples
dotnet build -bl
dotnet build -bl:SpecificStep.binlog
MSBuild.exe -bl:ServiceRelease.binlog -p:Configuration=Release
Consulte também Mais detalhes sobre logs binários.
Capturar logs binários por meio do Visual Studio
Para capturar logs para todas as invocações do MSBuild:
Defina a variável de ambiente MSBUILDDEBUGENGINE para '1' e (opcionalmente) MSBUILDDEBUGPATH para uma pasta de destino existente para armazenar os logs capturados. Em seguida, inicie o Visual Studio a partir do mesmo shell para herdar o ambiente:
SET MSBUILDDEBUGENGINE=1
SET MSBUILDDEBUGPATH=C:\MSBuildReproLogs
devenv.exe MySolution.sln
$env:MSBUILDDEBUGENGINE = 1
$env:MSBUILDDEBUGPATH="C:\MSBuildReproLogs"
& "devenv.exe" MySolution.sln
Os logs binários do MSBuild são capturados para um local especificado através da variável de ambiente MSBUILDDEBUGPATH (ou por padrão, para a subpasta MSBuild_Logs de uma pasta atual ou %temp%, com base nos direitos de acesso).
Observação
Os registos são gravados para cada execução do MSBuild (incluindo compilações em tempo de design) e mantidos na pasta sem remover os mais antigos, o que significa que o número de ficheiros de registo pode crescer rapidamente. Recomenda-se definir a variável de ambiente opt-in apenas para o curto período de reprodução do problema a ser investigado (embora seja compreensível que alguns problemas não determinísticos possam precisar de várias tentativas de reprodução).
Criar um log binário do MSBuild usando a extensão Project System Tools
Consulte este guia no repositório Ferramentas do Sistema de Projeto para capturar binlogs por meio do Visual Studio.
Baixe e instale a extensão Project System Tools.
Uma vez instalada a extensão, alguns novos itens aparecem no menu Exibir>outras janelas .
Selecione Ver>Outras Janelas>Log de Construção para mostrar a janela Log de Construção no Visual Studio. Escolha o primeiro ícone da barra de ferramentas para começar a gravar compilações regulares e em tempo de design no sistema de projeto.
Depois que uma compilação é registada, ela aparece na janela de Registo de Compilação. Clique com o botão direito do mouse no item e selecione Salvar logs no menu de contexto para salvar o
.binlogarquivo.
Você pode exibir e pesquisar seus arquivos .binlog usando o MSBuild Structured Log Viewer.