| 1 | # AIGuiders.DotNetBuildTestParsers |
| 2 | |
| 3 | Небольшая библиотека **без внешних зависимостей**: она берёт **сырой текст** из stdout/stderr процессов `dotnet build` и `dotnet test` и возвращает структуры C#, с которыми удобно строить отчёты, панели в IDE, ответы MCP и т.д. |
| 4 | |
| 5 | **Целевой фреймворк:** .NET 10 (`net10.0`). **Лицензия:** MIT. |
| 6 | |
| 7 | ## Зачем |
| 8 | |
| 9 | - **Сборка:** MSBuild печатает диагностики в виде `путь(строка,столбец): error|warning КОД: сообщение` — парсер вытаскивает списки ошибок и предупреждений и при необходимости код выхода из строки вида `Exit code: N`. |
| 10 | - **Тесты:** при типичном консольном выводе `dotnet test` парсер собирает счётчики passed/failed/skipped и для упавших тестов — имя, длительность (если есть) и текст сообщения, если он следует в логе сразу после `Failed …`. |
| 11 | |
| 12 | Такой слой общий для инструментов вроде **dotnet-build-test-mcp** и **Cascade IDE**: один раз разобрали вывод — дальше не дублировать regex по проектам. |
| 13 | |
| 14 | ## Установка |
| 15 | |
| 16 | ```bash |
| 17 | dotnet add package AIGuiders.DotNetBuildTestParsers |
| 18 | ``` |
| 19 | |
| 20 | Пакет на NuGet: [AIGuiders.DotNetBuildTestParsers](https://www.nuget.org/packages/AIGuiders.DotNetBuildTestParsers). Исходники: [github.com/KarataevDmitry/dotnet-build-test-parsers](https://github.com/KarataevDmitry/dotnet-build-test-parsers). |
| 21 | |
| 22 | ## `dotnet build` |
| 23 | |
| 24 | ```csharp |
| 25 | using DotNetBuildTestParsers; |
| 26 | |
| 27 | var log = await File.ReadAllTextAsync("build.log"); // или stdout процесса |
| 28 | var r = BuildOutputParser.Parse(log); |
| 29 | |
| 30 | if (!r.Success) |
| 31 | { |
| 32 | foreach (var e in r.Errors) |
| 33 | Console.WriteLine($"{e.File}:{e.Line} {e.Code} {e.Message}"); |
| 34 | } |
| 35 | // r.Warnings — предупреждения; r.ExitCode — если в тексте была строка Exit code: |
| 36 | ``` |
| 37 | |
| 38 | **Типы:** `BuildParseResult`, `BuildDiagnostic` (файл, строка, столбец, код, сообщение). |
| 39 | |
| 40 | ## `dotnet test` |
| 41 | |
| 42 | Ориентир по формату лога — **console** logger, уровень детализации **normal** или **detailed**, когда в выводе есть строки вида `Passed …`, `Failed …` и при падении блоки с `Error Message:` / `Message:`. |
| 43 | |
| 44 | ```csharp |
| 45 | using DotNetBuildTestParsers; |
| 46 | |
| 47 | var log = await File.ReadAllTextAsync("test.log"); |
| 48 | var r = TestOutputParser.Parse(log); |
| 49 | |
| 50 | Console.WriteLine($"Total={r.Total}, passed={r.Passed}, failed={r.Failed}, skipped={r.Skipped}"); |
| 51 | foreach (var t in r.FailedTests) |
| 52 | Console.WriteLine($"{t.Name}: {t.Message}"); |
| 53 | ``` |
| 54 | |
| 55 | **Типы:** `TestParseResult`, `TestResultItem`. |
| 56 | |
| 57 | ## Ограничения |
| 58 | |
| 59 | Парсеры заточены под **распространённые шаблоны** вывода MSBuild и консольного логгера тестов. Экзотические локали, другие логгеры или сильно урезанный verbosity могут дать неполную картину — в сомнительных случаях проверяй сырой лог рядом с результатом `Parse`. |
| 60 | |