Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le procedure seguenti consentono di diagnosticare i problemi di compilazione nel progetto di Visual Studio e, se necessario, creare un log da inviare a Microsoft per l'analisi.
Un valore della proprietà viene ignorato
Se una proprietà del progetto viene impostata su un valore specifico, ma la proprietà non ha alcun effetto sulla compilazione, seguire questa procedura:
Aprire il prompt dei comandi per gli sviluppatori di Visual Studio corrispondente alla versione di Visual Studio.
Eseguire il comando seguente, dopo aver sostituito i valori per il percorso, la configurazione e il nome del progetto della soluzione:
MSBuild /p:SolutionDir="c:\MySolutionDir\";Configuration="MyConfiguration";Platform="Win32" /pp:out.xml MyProject.vcxprojQuesto comando produce un file di progetto MSBuild "pre-elaborato" (out.xml). È possibile cercare in tale file una proprietà specifica per vedere dove è definita.
L'ultima definizione di una proprietà è quella utilizzata dal build. Se la proprietà viene impostata due volte, il secondo valore sovrascrive il primo. INOLTRE, MSBuild valuta il progetto in diversi passaggi:
- PropertyGroups e Imports
- ItemDefinitionGroups
- ItemGroups
- Obiettivi
Pertanto, in base all'ordine seguente:
<PropertyGroup>
<MyProperty>A</MyProperty>
</PropertyGroup>
<ItemGroup>
<MyItems Include="MyFile.txt"/>
</ItemGroup>
<ItemDefinitionGroup>
<MyItems>
<MyMetadata>$(MyProperty)</MyMetadata>
</MyItems>
</ItemDefinitionGroup>
<PropertyGroup>
<MyProperty>B</MyProperty>
</PropertyGroup>
Il valore di MyMetadata per l'elemento MyFile.txt viene valutato a B durante la compilazione (non A e non vuoto).
La compilazione incrementale sta creando più di quanto dovrebbe
Se MSBuild ricompila inutilmente un progetto o un elemento di progetto, creare un log di compilazione dettagliato o binario. È possibile cercare nel log il file che è stato creato o compilato inutilmente. L'output è simile al seguente:
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
Se si esegue la compilazione nell'IDE di Visual Studio (con dettaglio della finestra di output), nella finestra di output viene visualizzato il motivo per cui ogni progetto non è 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.
Creare un log dettagliato
- Aprire il riquadro Opzioni strumenti> ed espandere la sezione Tutte le impostazioni>>.
- Aprire la finestra di dialogo Strumenti>Opzioni ed espandere la sezione Progetti e soluzioni>Compilazione e esecuzione.
Utilizzare gli elenchi a discesa e impostare sia l'opzione di verbalità dell'output di compilazione del progetto MSBuild che l'opzione di verbalità del file di log di compilazione del progetto MSBuild su Dettagliato.
Il primo controlla il livello di dettaglio della compilazione nella finestra di output e il secondo controlla il livello di dettaglio della compilazione nel file creato nella directory intermedia di ogni progetto durante la compilazione.
Da un prompt dei comandi per gli sviluppatori di Visual Studio immettere uno di questi comandi, sostituendo il percorso e i valori di configurazione effettivi:
MSBuild /p:Configuration="MyConfiguration";Platform="x86" /fl MySolution.slno
MSBuild /p:/p:SolutionDir="c:\MySolutionDir\";Configuration="MyConfiguration";Platform="Win32" /fl MyProject.vcxprojViene creato un
MSBuild.logfile nella directory da cui è stato eseguito MSBuild.
Specificare i log binari di MSBuild per l'analisi
MSBuild ha la possibilità di acquisire un file di log binario dettagliato. Se si verifica un problema di compilazione e si è in grado di fornire un log binario, il log può essere utile per analizzare il problema.
Tuttavia, è necessario essere consapevoli del tipo di informazioni acquisite nel log binario per assicurarsi di non condividere inavvertitamente più di quanto previsto. Il log binario acquisisce quasi tutte le operazioni eseguite dalla compilazione, inclusi il contenuto dei file di progetto e tutti i file (ad esempio .props e .targets) importati, tutte le attività eseguite durante la compilazione e l'input e l'output, nonché le variabili di ambiente a cui è stato eseguito l'accesso in tale sessione di MSBuild. In genere non include il contenuto dei file di origine compilati, ma acquisisce i nomi completi e i percorsi.
Annotazioni
Alcuni ambienti di compilazione rendono disponibili i segreti usando le variabili di ambiente. Prima di condividere un log binario, assicurarsi che non esponga token API o altri segreti importanti.
Acquisire i log binari per le compilazioni a riga di comando
È possibile creare un log binario passando il -bl parametro a MSBuild (MSBuild.exe o dotnet build). È possibile esplorare il contenuto del file generato .binlog usando MSBuild Structured Log Viewer o nel browser usando Live Structured Log Viewer. MSBuild non acquisisce dati dai log binari visualizzati nel browser.
Esempi
dotnet build -bl
dotnet build -bl:SpecificStep.binlog
MSBuild.exe -bl:ServiceRelease.binlog -p:Configuration=Release
Vedere anche Altri dettagli sui log binari.
Acquisire log binari tramite Visual Studio
Per acquisire i log per tutte le chiamate di MSBuild:
Impostare la variabile di ambiente MSBUILDDEBUGENGINE su '1' e (facoltativamente) impostare MSBUILDDEBUGPATH su una cartella di destinazione esistente per archiviare i log acquisiti. Avviare quindi Visual Studio dalla stessa shell per ereditare l'ambiente:
SET MSBUILDDEBUGENGINE=1
SET MSBUILDDEBUGPATH=C:\MSBuildReproLogs
devenv.exe MySolution.sln
$env:MSBUILDDEBUGENGINE = 1
$env:MSBUILDDEBUGPATH="C:\MSBuildReproLogs"
& "devenv.exe" MySolution.sln
I log binari di MSBuild vengono quindi acquisiti in un percorso specificato tramite la variabile di ambiente MSBUILDDEBUGPATH (o per impostazione predefinita nella sottocartella MSBuild_Logs della cartella corrente %temp%, in base ai diritti di accesso).
Annotazioni
I log vengono registrati per ogni chiamata di MSBuild (incluse le build in fase di progettazione) e mantenuti nella cartella senza rimuovere quelli meno recenti, in modo che il numero di file di log possa crescere rapidamente. È consigliabile impostare la variabile di ambiente di consenso esplicito solo per la breve durata della riproduzione del problema da analizzare (anche se è comprensibile che alcuni problemi non deterministici potrebbero richiedere più tentativi di riproduzione).
Creare un log MSBuild binario usando l'estensione Project System Tools
Vedere questa guida nel repository Project System Tools per l'acquisizione di binlog tramite Visual Studio.
Scaricare e installare l'estensione Project System Tools.
Dopo aver installato l'estensione, alcuni nuovi elementi vengono visualizzati nel menu Visualizza>altre finestre .
Selezionare Visualizza>Altre finestre>Registrazione di compilazione per visualizzare la finestra Registrazione di compilazione in Visual Studio. Scegliere la prima icona della barra degli strumenti per avviare la registrazione delle compilazioni regolari e della fase di progettazione nel sistema di progetto.
Una volta registrata una compilazione, viene visualizzata nella finestra Registro delle compilazioni. Fare clic con il pulsante destro del mouse sull'elemento e scegliere Salva log dal menu di scelta rapida per salvare il
.binlogfile.
È possibile visualizzare e cercare i file con estensione binlog usando MSBuild Structured Log Viewer.