Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los procedimientos siguientes pueden ayudarle a diagnosticar problemas de compilación en el proyecto de Visual Studio y, si es necesario, crear un registro para enviarlo a Microsoft para su investigación.
Se ignora un valor de propiedad
Si una propiedad del proyecto aparece establecida en un valor determinado, pero la propiedad no tiene efecto alguno en la compilación, siga estos pasos:
Abra el símbolo del sistema para desarrolladores de Visual Studio correspondiente a la versión de Visual Studio.
Ejecute el comando siguiente después de sustituir los valores de la ruta de acceso de la solución, la configuración y el nombre del proyecto:
MSBuild /p:SolutionDir="c:\MySolutionDir\";Configuration="MyConfiguration";Platform="Win32" /pp:out.xml MyProject.vcxprojEste comando genera un archivo de proyecto de MSBuild "preprocesado" (out.xml). Puede buscar en ese archivo una propiedad específica para ver dónde está definido.
La última definición de una propiedad es lo que consume el proceso de compilación. Si se establece la propiedad dos veces, el segundo valor sobrescribirá al primero. Además, MSBuild evalúa el proyecto en varios pasos:
- Grupos de Propiedades e Importaciones
- GruposDeDefiniciónDeElementos
- ItemGroups
- Targets
Por lo tanto, dado el siguiente orden:
<PropertyGroup>
<MyProperty>A</MyProperty>
</PropertyGroup>
<ItemGroup>
<MyItems Include="MyFile.txt"/>
</ItemGroup>
<ItemDefinitionGroup>
<MyItems>
<MyMetadata>$(MyProperty)</MyMetadata>
</MyItems>
</ItemDefinitionGroup>
<PropertyGroup>
<MyProperty>B</MyProperty>
</PropertyGroup>
El valor de MyMetadata para el elemento MyFile.txt se evalúa como B durante la compilación (no A y no está vacío).
La construcción incremental está construyendo más de lo que debería
Si MSBuild vuelve a generar innecesariamente un proyecto o elemento de proyecto, cree un registro de compilación detallado o binario. Puede buscar en el registro el archivo que fue construido o compilado innecesariamente. La salida tiene un aspecto similar al siguiente:
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
Si va a compilar en el IDE de Visual Studio (con detalle de la ventana de salida detallada), la ventana de salida muestra el motivo por el que cada proyecto no es up-to-date:
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.
Creación de un registro detallado
- Abra el panel Opciones de herramientas> y expanda la sección Todos losproyectos y soluciones> de configuración>Compilación y ejecución.
- Abra el cuadro de diálogo Opciones de herramientas> y expanda la sección Proyectos y soluciones>.
Utilice las listas desplegables y establezca tanto el nivel de detalle de la salida de compilación del proyecto de MSBuild como el nivel de detalle del archivo de registro de construcción del proyecto de MSBuild en Detallado.
La parte superior controla el nivel de detalle de la compilación en la ventana de salida y la segunda controla la detalle de compilación en el archivo que se crea en el directorio intermedio de cada proyecto durante la
{projectname}.logcompilación.En un símbolo del sistema para desarrolladores de Visual Studio, escriba uno de estos comandos, sustituyendo la ruta de acceso real y los valores de configuración:
MSBuild /p:Configuration="MyConfiguration";Platform="x86" /fl MySolution.slno
MSBuild /p:/p:SolutionDir="c:\MySolutionDir\";Configuration="MyConfiguration";Platform="Win32" /fl MyProject.vcxprojSe crea un
MSBuild.logarchivo en el directorio desde el que ejecutó MSBuild.
Proporcionar registros binarios de MSBuild para la investigación
MSBuild tiene la capacidad de capturar un archivo de registro binario detallado. Si tiene un problema de compilación y puede proporcionar un registro binario, el registro puede resultar útil para investigar el problema.
Sin embargo, debe tener en cuenta qué tipo de información se captura en el registro binario para asegurarse de no compartir accidentalmente más de lo que pretende. El registro binario captura casi todo lo que hace la compilación, incluido el contenido de los archivos del proyecto y los archivos (como .props y .targets) que importan, todas las tareas que se ejecutan durante la compilación, así como la entrada y salida, así como las variables de entorno a las que se ha accedido en esa sesión de MSBuild. Por lo general, no incluye el contenido de los archivos de origen compilados, pero captura sus nombres completos y rutas de acceso.
Nota:
Algunos entornos de compilación hacen que los secretos estén disponibles mediante variables de entorno. Antes de compartir un registro binario, asegúrese de que no expone tokens de API ni otros secretos importantes.
Captura de registros binarios para compilaciones de línea de comandos
Puede crear un registro binario pasando el -bl parámetro a MSBuild (MSBuild.exe o dotnet build). Puede explorar el contenido del archivo generado .binlog mediante el Visor de registros estructurados de MSBuild o en el explorador mediante Live Structured Log Viewer. MSBuild no captura datos de registros binarios vistos en el explorador.
Examples
dotnet build -bl
dotnet build -bl:SpecificStep.binlog
MSBuild.exe -bl:ServiceRelease.binlog -p:Configuration=Release
Consulte también Más detalles sobre los registros binarios.
Captura de registros binarios a través de Visual Studio
Para capturar registros para todas las invocaciones de MSBuild:
Establezca MSBUILDDEBUGENGINE la variable de entorno en '1' y (opcionalmente) establezca MSBUILDDEBUGPATH en una carpeta de destino existente para almacenar los registros capturados. A continuación, inicie Visual Studio desde el mismo shell para heredar el entorno:
SET MSBUILDDEBUGENGINE=1
SET MSBUILDDEBUGPATH=C:\MSBuildReproLogs
devenv.exe MySolution.sln
$env:MSBUILDDEBUGENGINE = 1
$env:MSBUILDDEBUGPATH="C:\MSBuildReproLogs"
& "devenv.exe" MySolution.sln
A continuación, los registros binarios de MSBuild se capturan en una ubicación especificada mediante MSBUILDDEBUGPATH de una variable de entorno (o, por defecto, en MSBuild_Logs, la subcarpeta de la carpeta actual o en %temp%, según los derechos de acceso).
Nota:
Los registros se registran para cada invocación de MSBuild (incluidas las compilaciones en tiempo de diseño) y se mantienen en la carpeta sin quitar los más antiguos, por lo que el número de archivos de registro puede crecer rápidamente. Se recomienda establecer la variable de entorno de activación solo por el breve periodo necesario para reproducir el problema que se va a investigar (aunque es comprensible que algunos problemas no deterministas necesiten intentos múltiples de reproducción).
Creación de un registro binario de MSBuild mediante la extensión Project System Tools
Consulte esta guía en el repositorio de Project System Tools para capturar registros binarios usando Visual Studio.
Descargue e instale la extensión Project System Tools.
Una vez instalada la extensión, algunos elementos nuevos aparecen en el menú Ver>otras ventanas .
Seleccione Ver>Otras ventanas>Registro de compilación para mostrar la ventana Registro de compilación en Visual Studio. Elija el primer icono de la barra de herramientas para iniciar la grabación de compilaciones normales y en tiempo de diseño en el sistema de proyectos.
Una vez que se registra una compilación, aparece en la ventana Registro de compilación. Haga clic con el botón derecho en el elemento y seleccione Guardar registros en el menú contextual para guardar el
.binlogarchivo.
Puede ver y buscar los archivos .binlog mediante el Visor de registros estructurados de MSBuild.