Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:
Open de Visual Studio Developer-opdrachtprompt die overeenkomt met uw versie van Visual Studio.
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.vcxprojMet 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
- Open het deelvenster Extra>opties en vouw de sectie Alle instellingen>Projecten en oplossingen>Bouwen en uitvoeren uit.
- Open het dialoogvenster Extra>Opties en vouw de sectie Projecten en Oplossingen>Bouwen en Uitvoeren uit.
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}.logbestand dat tijdens de build in de tussendirectory van elk project wordt aangemaakt.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.slnor
MSBuild /p:/p:SolutionDir="c:\MySolutionDir\";Configuration="MyConfiguration";Platform="Win32" /fl MyProject.vcxprojEr wordt een
MSBuild.logbestand 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.
Download en installeer de extensie Project System Tools.
Zodra de extensie is geïnstalleerd, worden sommige nieuwe items weergegeven in het menuAndere vensters>.
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.
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
.binlogbestand op te slaan.
U kunt uw BINLOG-bestanden bekijken en doorzoeken met behulp van de MSBuild Structured Log Viewer.