Delen via


Logboeken voor MSBuild-problemen oplossen en maken

Met de volgende procedures kunt u buildproblemen in uw Visual Studio-project vaststellen en, indien nodig, een logboek maken dat naar Microsoft moet worden verzonden voor onderzoek.

Een eigenschapswaarde wordt genegeerd

Als een projecteigenschap wordt ingesteld op een bepaalde waarde, maar de eigenschap geen effect heeft op de build, voert u de volgende stappen uit:

  1. Open de Visual Studio Developer-opdrachtprompt die overeenkomt met uw versie van Visual Studio.

  2. Voer de volgende opdracht uit nadat u de waarden voor het oplossingspad, de configuratie en de projectnaam hebt vervangen:

    MSBuild /p:SolutionDir="c:\MySolutionDir\";Configuration="MyConfiguration";Platform="Win32" /pp:out.xml MyProject.vcxproj
    

    Met deze opdracht wordt een MSBuild-projectbestand (out.xml) geproduceerd dat vooraf is verwerkt. U kunt dat bestand zoeken naar een specifieke eigenschap om te zien waar het is gedefinieerd.

De laatste definitie van een eigenschap is wat de build verbruikt. Als de eigenschap twee keer is ingesteld, overschrijft de tweede waarde de eerste. Daarnaast evalueert MSBuild het project in verschillende passen:

  • Eigenschapsgroepen en Importen
  • ItemDefinitionGroups
  • ItemGroups
  • Targets

Daarom, gezien de volgende volgorde:

<PropertyGroup>
   <MyProperty>A</MyProperty>
</PropertyGroup>
<ItemGroup>
   <MyItems Include="MyFile.txt"/>
</ItemGroup>
<ItemDefinitionGroup>
  <MyItems>
      <MyMetadata>$(MyProperty)</MyMetadata>
  </MyItems>
</ItemDefinitionGroup>
<PropertyGroup>
   <MyProperty>B</MyProperty>
</PropertyGroup>

De waarde van MyMetadata voor het MyFile.txt item wordt tijdens de B build geëvalueerd (niet A en niet leeg).

Incrementele build bouwt meer dan het zou moeten

Als MSBuild een project- of projectitem onnodig opnieuw opbouwt, maakt u een gedetailleerd of binair buildlogboek. U kunt in het logboek zoeken naar het bestand dat onnodig is gemaakt of gecompileerd. De uitvoer ziet er ongeveer als volgt uit:

  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

Als u bouwt in de Visual Studio IDE (met gedetailleerde uitbreiding van het uitvoervenster), wordt in het uitvoervenster de reden weergegeven waarom elk project niet up-to-date is:

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.

Een gedetailleerd logboek maken

  1. Open het deelvenster Extra>opties en vouw de sectie Alle instellingen>Projecten en oplossingen>Bouwen en uitvoeren uit.
  1. Open het dialoogvenster Extra>Opties en vouw de sectie Projecten en Oplossingen>Bouwen en Uitvoeren uit.
  1. Gebruik de vervolgkeuzelijsten en stel zowel de MSBuild project build uitvoer gedetailleerdheid als de MSBuild project build logbestand gedetailleerdheid opties in op Gedetailleerd.

    De bovenste besturingselement bestuurt de bouwuitvoer in het Uitvoervenster en het tweede besturingselement bestuurt de bouwuitvoer in het {projectname}.log bestand dat tijdens de build in de tussendirectory van elk project wordt aangemaakt.

  2. Voer vanaf een Opdrachtprompt voor Ontwikkelaars van Visual Studio een van deze opdrachten in, waarbij u de werkelijke pad- en configuratiewaarden vervangt:

    MSBuild /p:Configuration="MyConfiguration";Platform="x86" /fl MySolution.sln
    

    or

    MSBuild /p:/p:SolutionDir="c:\MySolutionDir\";Configuration="MyConfiguration";Platform="Win32" /fl MyProject.vcxproj
    

    Er wordt een MSBuild.log bestand gemaakt in de map waaruit u MSBuild hebt uitgevoerd.

Binaire MSBuild-logboeken opgeven voor onderzoek

MSBuild heeft de mogelijkheid om een gedetailleerd binair logboekbestand vast te leggen. Als u een buildprobleem ondervindt en een binair logboek kunt opgeven, kan het logboek handig zijn voor het onderzoeken van het probleem.

U moet echter weten welk type informatie wordt vastgelegd in het binaire logboek om ervoor te zorgen dat u niet per ongeluk meer deelt dan u van plan bent. Het binaire logboek legt bijna alles vast wat uw build doet, inclusief de inhoud van uw projectbestanden en bestanden (zoals .props en .targets) die ze importeren, alle taken die tijdens de build worden uitgevoerd, evenals de invoer en uitvoer, evenals omgevingsvariabelen die zijn geopend in die MSBuild-sessie. Over het algemeen bevat het niet de inhoud van de bronbestanden die zijn gecompileerd, maar worden wel de volledige namen en paden vastgelegd.

Opmerking

Sommige buildomgevingen maken geheimen beschikbaar met behulp van omgevingsvariabelen. Voordat u een binair logboek deelt, moet u ervoor zorgen dat er geen API-tokens of andere belangrijke geheimen worden weergegeven.

Binaire logboeken vastleggen voor command-line builds

U kunt een binair logboek maken door de -bl parameter door te geven aan MSBuild (MSBuild.exe of dotnet build). U kunt de inhoud van het gegenereerde .binlog bestand verkennen met behulp van MSBuild Structured Log Viewer of in uw browser met behulp van Live Structured Log Viewer. MSBuild legt geen gegevens vast uit binaire logboeken die in uw browser worden weergegeven.

Voorbeelden

dotnet build -bl
dotnet build -bl:SpecificStep.binlog
MSBuild.exe -bl:ServiceRelease.binlog -p:Configuration=Release

Zie ook Meer informatie over binaire logboeken.

Binaire logboeken vastleggen via Visual Studio

Logboeken vastleggen voor alle MSBuild-aanroepen:

Stel de omgevingsvariabele MSBUILDDEBUGENGINE in op '1' en stel (optioneel) MSBUILDDEBUGPATH in op een bestaande doelmap om de vastgelegde logbestanden op te slaan. Start Vervolgens Visual Studio vanuit dezelfde shell om de omgeving over te nemen:

SET MSBUILDDEBUGENGINE=1
SET MSBUILDDEBUGPATH=C:\MSBuildReproLogs
devenv.exe MySolution.sln
$env:MSBUILDDEBUGENGINE = 1
$env:MSBUILDDEBUGPATH="C:\MSBuildReproLogs"
& "devenv.exe" MySolution.sln

Binaire MSBuild-logboeken worden vervolgens vastgelegd op een locatie die is opgegeven via MSBUILDDEBUGPATH een omgevingsvariabele (of standaard submap MSBuild_Logs van een huidige map of %temp%, op basis van toegangsrechten).

Opmerking

Logboeken worden vastgelegd voor elke MSBuild-aanroep (inclusief builds van ontwerptijd) en bewaard in de map zonder oudere bestanden te verwijderen, zodat het aantal logboekbestanden snel kan groeien. Het is raadzaam om de omgevingsvariabele voor opt-in alleen in te stellen voor de korte duur van het reproduceren van het probleem dat moet worden onderzocht (hoewel het begrijpelijk is dat sommige niet-deterministische problemen meerdere reproductiepogingen nodig hebben).

Een binair MSBuild-logboek maken met behulp van de extensie Project System Tools

Zie deze handleiding in de opslagplaats Project System Tools voor het vastleggen van binlogs via Visual Studio.

  1. Download en installeer de extensie Project System Tools.

  2. Zodra de extensie is geïnstalleerd, worden sommige nieuwe items weergegeven in het menuAndere vensters>.

    Ander Windows-menu

  3. Selecteer View>Other Windows>Build Logging om het Build Logging-venster in Visual Studio te tonen. Kies het eerste werkbalkpictogram om zowel standaard als ontwerptijd-builds op te nemen binnen het projectsysteem.

    Venster Logboekregistratie maken

  4. Zodra een build is vastgelegd, wordt deze weergegeven in het venster Build Logging. Klik met de rechtermuisknop op het item en selecteer Logboeken opslaan in het contextmenu om het .binlog bestand op te slaan.

    Contextmenu voor logboekregistratie maken

U kunt uw BINLOG-bestanden bekijken en doorzoeken met behulp van de MSBuild Structured Log Viewer.