Sdílet prostřednictvím


Diagnostika selhání úloh MSBuild

MSB6006 se vygeneruje, když úloha MSBuild, odvozená ToolTasktřída, spustí proces nástroje, který vrátí nenulový ukončovací kód, pokud úloha nezapíše konkrétnější chybu.

Identifikace neúspěšné úlohy

Při výskytu chyby úkolu je prvním krokem identifikace úlohy, která selhává.

Text chyby určuje název nástroje (popisný název zadaný implementací ToolName úlohy nebo názvem spustitelného souboru) a číselný ukončovací kód. Například v error MSB6006: "custom tool" exited with code 1. názvu nástroje je custom tool a ukončovací kód je 1.

Zjištění neúspěšné úlohy MSBuild:

  • V sestaveních příkazového řádku: Pokud je sestavení nakonfigurované tak, aby obsahovalo souhrn (výchozí), bude souhrn vypadat takto:

    Build FAILED.
    
    "S:\MSB6006_demo\MSB6006_demo.csproj" (default target) (1) ->
    (InvokeToolTask target) ->
      S:\MSB6006_demo\MSB6006_demo.csproj(19,5): error MSB6006: "custom tool" exited with code 1.
    

    Tento výsledek označuje, že došlo k chybě v úkolu definovaném na řádku 19 souboru S:\MSB6006_demo\MSB6006_demo.csproj, v cíli s názvem InvokeToolTask, v projektu S:\MSB6006_demo\MSB6006_demo.csproj.

  • V uživatelském rozhraní sady Visual Studio: Stejné informace jsou k dispozici v seznamu chyb sady Visual Studio ve sloupcích Projecta LineFile.

Další informace o selhání

Chyba MSB6006 se vygeneruje, když úloha nezapíše konkrétní chybu. Příčinou selhání protokolování chyby je často to, že úloha není nakonfigurovaná tak, aby porozuměla formátu chyby generovanému nástrojem, který volá.

Dobře se chované nástroje obvykle generují do standardního výstupu nebo datového proudu chyb určité kontextové nebo chybové informace a úlohy ve výchozím nastavení zaznamenávají a protokolují tyto informace. Další informace najdete v položkách protokolu, než došlo k chybě. K zachování těchto informací může být nutné znovu spustit sestavení s vyšší úrovní protokolu. Doufejme, že další kontext nebo chyby zjištěné v protokolování odhalí původní příčinu problému. Pokud ne, možná budete muset zúžit potenciální příčiny prozkoumáním vlastností a položek, které jsou vstupy do neúspěšné úlohy.

Poznámka:

Nástroj MSBuild rozpozná konkrétní formát výstupu diagnostiky. Podrobnosti o tomto formátu jsou zdokumentované ve formátu MSBuild a sady Visual Studio pro diagnostické zprávy.

Ladění úlohy

Při ladění úloh MSBuild, zde je několik obecných tipů.

  • Zúžit rozsah zkušebního případu co nejvíce (například nastavením /p:BuildProjectReferences=false a spuštěním nástroje MSBuild s jedním konkrétním projektem nebo jedním konkrétním cílem), aby bylo méně kódu k práci.
  • Pomocí možnosti příkazového řádku /m:1 pro ladění jediného procesu MSBuild.
  • Nastavte proměnnou prostředí MSBUILDDEBUGONSTART na hodnotu 1, aby byl při spuštění nástroje MSBuild připojen ladicí program.
  • Nastavte zarážku na Execute metodu úkolu, která má krokovat.

Ladění vlastní úlohy

Pokud píšete kód pro vlastní úlohu, můžete usnadnit ladění přidáním volání pro vyvolání ladicího programu v metodě úlohy Execute . Tento kód můžete ohražovat pomocí kontroly proměnné prostředí, takže když uživatel nastaví tuto proměnnou prostředí, úloha se zastaví a uživateli umožní ladit. Můžete použít System.Diagnostics.Debugger.Launch nebo System.Diagnostics.Debugger.Break ke spuštění nebo přerušení v ladicím nástroji.

Ve vlastní úloze byste měli přidat co nejvíce protokolování, abyste uživatelům usnadnili ladění samotné úlohy. To je důležité, když konečně identifikujete původní případ selhání; přidejte dostatečný kód protokolování pro detekci a hlášení režimu selhání v budoucnu.

Zvažte nastavení testovacího prostředí pro úlohu pomocí xUnit. Viz Jednotkové testování C# v .NET Core pomocí dotnet test a xUnit. Test xUnit můžete nakonfigurovat tak, aby používal rozhraní MSBuild API k programovému vyvolání msBuildu pomocí napodobeného souboru projektu, který obsahuje vlastnosti, položky a cíle, které potřebujete ke spuštění daného úkolu. V některých případech může být vhodné vytvořit simulovaný build engine. Příklad si můžete prohlédnout na Jednotkovém testování vlastní úlohy MSBuild pomocí sady Visual Studio.

V projektech sady .NET SDK můžete také upravit launchSettings.json a přidat speciální profil ladění, který spouští MSBuild.exe s argumenty příkazového řádku a proměnnými prostředí uvedenými výše v tomto článku.

"profiles": {
  "Debug Build": {
    "commandName": "Executable",
    "executablePath": "$(MSBuildBinPath)\\MSBuild.exe",
    "commandLineArgs": "/p:Configuration=$(Configuration) $(ProjectFileName) /m:1",
    "workingDirectory": "$(ProjectDir)"
  }
}

Pokud chcete být vyzváni k připojení vlastního ladicího programu za běhu, nastavte proměnnou prostředí MSBUILDDEBUGONSTART na hodnotu 2. To může být užitečné, když používáte jiný ladicí program, například v systému macOS, když visual Studio není k dispozici.