Az MSBuild-problémák naplóinak hibaelhárítása és létrehozása

Az alábbi eljárások segíthetnek diagnosztizálni a Visual Studio-projekt buildelési problémáit, és szükség esetén létrehozhat egy naplót, amelyet elküldhet a Microsoftnak vizsgálat céljából.

A rendszer figyelmen kívül hagy egy tulajdonságértéket

Ha egy projekttulajdonság egy adott értékre van állítva, de a tulajdonságnak nincs hatása a buildre, kövesse az alábbi lépéseket:

  1. Nyissa meg a Visual Studio fejlesztői parancssorát, amely megfelel a Visual Studio verziójának.

  2. Futtassa a következő parancsot a megoldás elérési útjának, konfigurációjának és projektnevének értékeinek helyettesítése után:

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

    Ez a parancs létrehoz egy "előre feldolgozott" MSBuild projektfájlt (out.xml). A fájlban kereshet egy adott tulajdonságot, hogy lássa, hol van definiálva.

A tulajdonság utolsó definíciója az, amit a build felhasznál. Ha a tulajdonság kétszer van beállítva, a második érték felülírja az elsőt. Az MSBuild emellett több menetben értékeli ki a projektet:

  • Tulajdonságcsoportok és Importok
  • ItemDefinitionGroups
  • ItemGroups
  • Targets

Ezért a következő sorrendben:

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

A MyMetadata értéke a MyFile.txt elem számára a build során B-re van kiértékelve (nem A és nem üresen).

Az inkrementális build több feladatot végez el, mint amennyit kellene.

Ha az MSBuild szükségtelenül újraépít egy projektet vagy projektelemet, hozzon létre egy részletes vagy bináris buildnaplót. A naplóban megkeresheti a feleslegesen létrehozott vagy lefordított fájlt. A kimenet a következőképpen néz ki:

  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

Ha a Visual Studio IDE-t használja (részletes kimeneti ablak beállításával), a Kimeneti ablak megjeleníti annak okát, hogy az egyes projektek miért nem naprakészek.

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.

Részletes napló létrehozása

  1. Nyissa meg az Eszközök>beállításai panelt, és bontsa ki a Minden beállítás>projekt és megoldás>összeállítása és futtatása szakaszt.
  1. Nyissa meg az Eszközök>beállításai párbeszédpanelt, és bontsa ki a Projektek és megoldások>buildelése és futtatása szakaszt.
  1. Használja a legördülő listákat, és állítsa be az MSBuild projekt build kimeneti részletességét és az MSBuild projekt buildelési naplófájl részletességi beállításait a Részletes értékre.

    A felső vezérli a kimeneti ablakban megjelenő build részletességét, míg a második a buildeléskor az egyes projektek köztes könyvtárában létrehozott {projectname}.log fájl részletességi szintjét vezérli.

  2. A Visual Studio fejlesztői parancssorából adja meg az alábbi parancsok egyikét, és helyettesítse a tényleges elérési utat és konfigurációs értékeket:

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

    vagy

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

    A rendszer létrehoz egy MSBuild.log fájlt abban a könyvtárban, amelyből az MSBuild parancsot futtatta.

MSBuild bináris naplók megadása vizsgálathoz

Az MSBuild képes egy részletes bináris naplófájl rögzítésére. Ha buildelési problémát tapasztal, és bináris naplót tud adni, a napló hasznos lehet a probléma kivizsgálásához.

Azonban tisztában kell lennie azzal, hogy milyen típusú információkat rögzít a bináris napló, hogy biztosan ne ossza meg véletlenül a kívántnál többet. A bináris napló szinte mindent rögzít, amit a buildel, beleértve a projektfájlok tartalmát és az általuk importált fájlokat (például .props és .targets), a build során futtatott összes feladatot, valamint a bemenetet és kimenetet, valamint az adott MSBuild munkamenetben elért környezeti változókat. Általában nem tartalmazza a lefordított forrásfájlok tartalmát, de rögzíti a teljes nevüket és elérési útjukat.

Megjegyzés:

Egyes buildkörnyezetek környezeti változókkal teszik elérhetővé a titkos kulcsokat. A bináris naplók megosztása előtt győződjön meg arról, hogy nem tesz közzé API-jogkivonatokat vagy más fontos titkos kulcsokat.

Bináris naplók rögzítése parancssori buildekhez

Bináris naplót úgy hozhat létre, hogy a -bl paramétert megadja az MSBuild (MSBuild.exe vagy dotnet build) számára. A létrehozott .binlog fájl tartalmát az MSBuild Structured Log Viewer használatával vagy a böngészőben az Élő strukturált naplómegjelenítő használatával ismerheti meg. Az MSBuild nem rögzít adatokat a böngészőben megtekintett bináris naplókból.

Példák

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

További információ a bináris naplókról.

Bináris naplók rögzítése a Visual Studióban

A naplók rögzítése minden MSBuild-híváshoz:

A MSBUILDDEBUGENGINE környezeti változót állítsa be '1'-re, és (opcionálisan) állítsa be MSBUILDDEBUGPATH egy meglévő célmappára a rögzített naplók tárolásához. Ezután indítsa el a Visual Studio-t ugyanabból a parancssorból a környezet beállításainak átvételéhez.

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

Az MSBuild bináris naplók ezután egy környezeti változóval MSBUILDDEBUGPATH megadott helyre lesznek rögzítve (vagy alapértelmezés szerint MSBuild_Logs az aktuális mappa almappájába vagy %temp%a hozzáférési jogosultságok alapján).

Megjegyzés:

A naplók minden MSBuild-meghíváshoz (beleértve a tervezési idő buildjeihez) rögzítve vannak, és a mappában maradnak a régebbiek eltávolítása nélkül , így a naplófájlok száma gyorsan nőhet. Javasoljuk, hogy csak a vizsgálandó probléma reprodukálásának rövid időtartamára állítsa be az opt-in környezeti változót (bár érthető, hogy egyes nemdeterminisztikus problémákhoz több reprodukciós kísérletre lehet szükség).

Bináris MSBuild napló létrehozása a Project System Tools bővítmény használatával

Ezt az útmutatót a Project System Tools adattárában találja a binlogok Visual Studióban való rögzítéséhez.

  1. Töltse le és telepítse a Project System Tools bővítményt.

  2. A bővítmény telepítése után néhány új elem megjelenik azEgyéb Windows> menüben.

    Egyéb Windows menü

  3. Válassza a Megtekintés>Egyéb ablakok>Buildnaplózás lehetőséget a Buildnaplózás ablak megjelenítéséhez a Visual Studio-ban. Az első eszköztár ikont választva megkezdi a normál és a tervezési idejű buildek felvételét a projektrendszerben.

    Naplózási ablak létrehozása

  4. A build rögzítése után megjelenik a buildnaplózási ablakban. Kattintson a jobb gombbal az elemre, és a helyi menüBen válassza a Naplók mentése lehetőséget a fájl mentéséhez .binlog .

    A naplózás helyi menüjének összeállítása

A .binlog-fájlokat az MSBuild Structured Log Viewer használatával tekintheti meg és keresheti meg.