Qual é o local padrão para os logs do MSBuild?

101

Estou usando o Visual Studio Express 2012. Onde está o local do arquivo de log? Procurei na pasta onde minha solução e projetos estão armazenados, mas não consigo encontrar nenhum arquivo .log.

Esta é a configuração para registro:

insira a descrição da imagem aqui

Hanxue
fonte
1
Não há arquivo .log padrão. Olhe na janela de saída.
Hans Passant
13
@Hans, no meu caso, a janela de saída tem mensagens dizendo "mais informações estão disponíveis no log de compilação." portanto, há um registro separado em algum lugar. Eu não encontrei ainda.
Brandon Kuczenski

Respostas:

106

O arquivo de log do Visual Studio é compatível apenas com projetos C ++. Você apenas tem que trabalhar com a janela de saída para os outros.

Veja este tópico semelhante: VS2010: log de criação mínimo na saída e log detalhado no arquivo de log

E caso você faça isso para um projeto C ++, o arquivo está em :

... log de compilação no diretório de arquivos intermediários ... O caminho e o nome do log de compilação são representados pela expressão de macro do MSBuild $(IntDir)\$(MSBuildProjectName).log,.

Dmitry Pavlov
fonte
14
Acho que é tolice do Visual Studio não ter log detalhado em um arquivo. Bem, uma realidade que tenho que aceitar. Obrigado pela sua resposta, @Dmitry
Hanxue
8
@hanxue - Tem um log. Esse log simplesmente não é enviado para um arquivo. Se você quiser um arquivo de log, execute msbuild na linha de comando.
Ritch Melton
43
ENTÃO POR QUE ISSO NÃO DIZ :-(
Simon_Weaver
2
Deus. Droga. Por que isso não é apenas uma propriedade da solução? Por que a janela de saída tem um desempenho tão terrível de qualquer maneira, de modo que você é forçado a mantê-la com uma saída mínima o tempo todo, e por que são 8 etapas para mudar de um nível de saída para outro? Corrija qualquer um desses, por favor.
James
@James Acho que você poderia escrever uma macro e atribuí-la ao botão da barra de ferramentas. Esses links podem ser um ponto de partida stackoverflow.com/questions/12062515/… e vlasovstudio.com/visual-commander
Dmitry Pavlov
23

A documentação do msdn é bastante clara sobre isso (e você não vai gostar!):

https://msdn.microsoft.com/en-us/library/jj651643.aspx

Onde diz:

Para criar um arquivo de log de build para um projeto de código gerenciado Na barra de menus, escolha Build, Build Solution.

Na janela Saída, destaque as informações da construção e copie-as para a Área de Transferência.

Abra um editor de texto, como o Bloco de notas, cole as informações no arquivo e salve-o.

C Johnson
fonte
15
O que é muito bom até que você esteja usando a saída de diagnóstico e o VS decida lançar uma exceção de 'falta de memória' quando você tenta copiar para a área de transferência. Realmente é uma decisão fundamentalmente estúpida não oferecer suporte ao envio do log de construção para um arquivo no IDE. Mas hey ho, assim é a vida.
Steve Pettifer
1
Pipe a construção em um arquivo de texto? msbuild mysln.sln> output.txt (provavelmente precisará adicionar parâmetros a isso para fazer seu sln compilar, mas você deve ser capaz de obter isso da janela de saída iirc no nível de detalhamento correto)
Daniel M
Normalmente, quando eu construo na linha de comando, eu faço meus sistemas de construção produzirem informações mínimas para a janela do terminal, mas um registro detalhado para um arquivo. O MSBuild pode fazer isso.
C Johnson
"E você não vai gostar!" Isso diz tudo em 6 palavras, obrigado
FIV
23

Use a saída da compilação em vez de registrar no arquivo. Em vez de copiar / colar, simplesmente clique em algum lugar na saída e pressione CTRL + S para salvar. O Visual Studio solicitará um local (testado com o Visual Studio 2017, mas presumo que isso funcione em versões anteriores também).

insira a descrição da imagem aqui

Dan Gøran Lunde
fonte
Isso é bom. Eles também devem colocar isso no menu de contexto.
Sheen
2

Embora seja verdade que o VS não permite isso diretamente, ainda é possível construir com o MSBuild "dentro" do VS2015 e obter a saída da janela de construção e o arquivo de log, da seguinte maneira: (Provavelmente, isso é um pouco um hack.)

  1. Em sua solução VS Managed, adicione um novo projeto (vamos chamá-lo de 'Make'). uma. O tipo de projeto que você deseja é o projeto Visual C ++ / NMake.
  2. Defina os comandos MSBuild de que você precisa na linha de comando (veja abaixo).
  3. Altere a configuração da solução para construir o projeto NMake em vez dos projetos gerenciados normais.

Isso criará um projeto que possui linhas de comando Build, Rebuild e Clean onde você pode executar o MSBuild diretamente. Por exemplo:

Reconstruir: MSBuild.exe /ds /v:diag /property:Configuration=Debug ..\BuildTest\BuildTest.csproj /t:Clean,Build

Construir: MSBuild.exe /ds /v:diag /property:Configuration=Debug ..\BuildTest\BuildTest.csproj /t:Build

Limpar \ limpo: MSBuild.exe /ds /v:diag /property:Configuration=Debug ..\BuildTest\BuildTest.csproj /t:Clean

Você também pode especificar várias linhas de comando MSBuild.EXE para criar vários projetos. Para o resultado usual de construção da solução inteira, você pode direcionar apenas os assemblies finais e deixar que o gráfico de dependência gere os destinos individuais.

Isso produzirá um arquivo .log, onde NAME é o nome do projeto NMake que você usou. No exemplo acima, o log seria make.log.

Um exemplo prático está disponível no GitHub: https://github.com/bitblitz/VS_MsbuildExample (testado com VS2015)

Observe que construir projetos individuais diretamente ainda construirá com o comportamento normal do VS, mas você pode construir a solução completa dentro do VS e obter os logs de construção.

Brad
fonte
1
O link para VS_MsbuildExample está quebrado.
JPaget
Olá @brad, o que aconteceu com seu exemplo no GitHub?
Yann Duran
Github corrigido, desculpe pelo problema. @YannDuran
Brad