¿Cuál es la ubicación predeterminada para los registros de MSBuild?

101

Estoy usando Visual Studio Express 2012. ¿Dónde está la ubicación del archivo de registro? He buscado en la carpeta donde se almacenan mi solución y mis proyectos, pero no puedo encontrar ningún archivo .log.

Esta es la configuración para el registro:

ingrese la descripción de la imagen aquí

Hanxue
fuente
1
No hay ningún archivo .log predeterminado. Mire en la ventana Salida.
Hans Passant
13
@Hans, en mi caso, la ventana de salida tiene mensajes que dicen "hay más información disponible en el registro de compilación". por lo que hay un registro separado en alguna parte. Aún no lo he encontrado.
Brandon Kuczenski

Respuestas:

106

El archivo de registro de Visual Studio solo es compatible con proyectos de C ++. Solo tiene que trabajar con la ventana de salida para otros.

Vea este hilo similar: VS2010: salida de registro de compilación mínima y archivo de registro de registro detallado

Y en caso de que haga esto para un proyecto de C ++, el archivo está en :

... registro de generación en el directorio de archivos intermedia ... La ruta y el nombre del registro de generación está representada por la macro expresión MSBuild, $(IntDir)\$(MSBuildProjectName).log.

Dmitry Pavlov
fuente
14
Creo que es una tontería de Visual Studio no tener un registro detallado en un archivo. Bueno, una realidad que tengo que aceptar. Gracias por tu respuesta, @Dmitry
Hanxue
8
@hanxue - Tiene un registro. Ese registro simplemente no se envía a un archivo. Si desea un archivo de registro, ejecute msbuild desde la línea de comandos.
Ritch Melton
43
ENTONCES POR QUÉ NO LO
DICE
2
Dios. Maldición. ¿Por qué no es esto solo una propiedad de la solución? ¿Por qué la ventana de salida tiene un rendimiento tan terrible de todos modos, por lo que se ve obligado a mantenerla en una salida mínima todo el tiempo, y por qué es como 8 pasos para cambiar de un nivel de salida a otro? Arregle cualquiera de estos por favor.
James
@James Supongo que podrías escribir una macro y asignarla al botón de la barra de herramientas. Estos enlaces podrían ser un punto de partida stackoverflow.com/questions/12062515/… y vlasovstudio.com/visual-commander
Dmitry Pavlov
23

La documentación de msdn es bastante clara sobre esto (¡y no te va a gustar!):

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

En donde dice:

Para crear un archivo de registro de compilación para un proyecto de código administrado En la barra de menú, seleccione Generar, Generar solución.

En la ventana Salida, resalte la información de la compilación y luego cópiela en el Portapapeles.

Abra un editor de texto, como el Bloc de notas, pegue la información en el archivo y luego guárdelo.

C Johnson
fuente
15
Lo cual está muy bien hasta que esté usando la salida de diagnóstico y VS decida lanzar una excepción de 'memoria insuficiente' cuando intente copiar en el portapapeles. Realmente es una decisión fundamentalmente estúpida no admitir el envío del registro de compilación a un archivo en el IDE. Pero bueno, así es la vida.
Steve Pettifer
1
¿Canalizar la construcción a un archivo de texto? msbuild mysln.sln> salida.txt (probablemente tendrá que añadir parámetros a que para obtener su sln para compilar, pero usted debería ser capaz de pega que de frente a la ventana de salida IIRC en el nivel de verbosidad correcta)
Daniel M
Por lo general, cuando construyo en la línea de comandos, hago que mis sistemas de construcción generen información mínima en la ventana de la terminal, pero un registro detallado en un archivo. MSBuild puede hacer eso.
C Johnson
"¡Y no te va a gustar!" Eso lo dice todo en 6 palabras, gracias
FIV
23

Utilice el resultado de la compilación en lugar de registrar el archivo. En lugar de copiar / pegar, simplemente haga clic en algún lugar de la salida y presione CTRL + S para guardar. Visual Studio le pedirá una ubicación (probado con Visual Studio 2017, pero supongo que esto también funciona en versiones anteriores).

ingrese la descripción de la imagen aquí

Dan Gøran Lunde
fuente
Esto es bueno. También deberían poner esto en el menú contextual.
Sheen
2

Si bien es cierto que VS no permite esto directamente, aún es posible compilar con MSBuild "dentro" de VS2015 y obtener tanto la salida de la ventana de compilación como el archivo de registro, de la siguiente manera: (Podría decirse que esto es un truco).

  1. En su solución VS Managed, agregue un nuevo proyecto (llamémoslo 'Make'). a. El tipo de proyecto que desea es el proyecto Visual C ++ / NMake.
  2. Defina los comandos de MSBuild que necesita en la línea de comandos (ver más abajo).
  3. Cambie la configuración de la solución para construir el proyecto NMake en lugar de los proyectos administrados normales.

Esto creará un proyecto que tiene líneas de comando Build, Rebuild y Clean donde puede ejecutar MSBuild directamente. Por ejemplo:

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

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

También puede especificar varias líneas de comando MSBuild.EXE para construir varios proyectos. Para obtener el resultado habitual de construir la solución completa, puede apuntar solo a los ensamblajes finales finales y dejar que el gráfico de dependencia genere los objetivos individuales.

Esto producirá un archivo .log, donde NAME es el nombre del proyecto NMake que usó. En el ejemplo anterior, el registro sería make.log.

Un ejemplo funcional está disponible en GitHub: https://github.com/bitblitz/VS_MsbuildExample (probado con VS2015)

Tenga en cuenta que la creación de proyectos individuales directamente se seguirá construyendo con el comportamiento normal de VS, pero puede crear la solución completa dentro de VS y obtener los registros de creación.

Puntilla
fuente
1
El enlace a VS_MsbuildExample está roto.
JPaget
Hola @brad, ¿qué pasó con tu ejemplo en GitHub?
Yann Duran
Arreglado github, perdón por problemas. @YannDuran
Brad