Sdílet prostřednictvím


Diagnostika selhání úloh NÁSTROJE MSBuild

MSB6006 je generována, když ToolTaskodvozená tří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 NÁSTROJE MSBuild tady jsou některé obecné tipy.

  • Zpřesní rozsah reproční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 měl méně kódu, se kterým se pracuje.
  • Pomocí možnosti /m:1 příkazového řádku NÁSTROJE MSBuild můžete ladit jeden proces NÁSTROJE MSBuild.
  • Nastavte proměnnou MSBUILDDEBUGONSTART prostředí na hodnotu 1, aby byl ladicí program připojený ke spuštění nástroje MSBuild.
  • 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. Ke spuštění nebo přerušení v ladicím programu můžete použít System.Diagnostics.Debugger.Launch nebo System.Diagnostics.Debugger.Break .

Ve vlastní úloze byste měli přidat co nejvíce protokolování, abyste uživatelům usnadnili jeho ladění. 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 Testování částí C# v .NET Core pomocí testu dotnet 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 napodobený modul sestavení. Příklad si můžete prohlédnout v tématu Testování částí vlastní úlohy MSBuild v sadě Visual Studio.

V projektech sady .NET SDK můžete také upravit spuštění Nastavení.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 MSBUILDDEBUGONSTART prostředí na 2hodnotu . 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.