Forge
markdown615df5ae
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
17dotnet 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
25using DotNetBuildTestParsers;
26
27var log = await File.ReadAllTextAsync("build.log"); // или stdout процесса
28var r = BuildOutputParser.Parse(log);
29
30if (!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
45using DotNetBuildTestParsers;
46
47var log = await File.ReadAllTextAsync("test.log");
48var r = TestOutputParser.Parse(log);
49
50Console.WriteLine($"Total={r.Total}, passed={r.Passed}, failed={r.Failed}, skipped={r.Skipped}");
51foreach (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
View only · write via MCP/CIDE