# Фаза 49. Пропуск сборки при запуске ## Зависимости Нет. Скрипт запуска уже есть. ## Зачем Повторный `run-aspire.cmd` без правок в C# не должен ждать MSBuild графа Aspire. Сборка нужна только когда входы новее dll или когда просили `--rebuild`. ## Задачи - [x] `tools/apphost-uptodate.ps1`: выход 0, если AppHost и Server dll новее входов; 1 — если нет dll или вход новее. Входы: `*.cs` / `*.csproj` / `*.props` под `src/` без `bin` / `obj` / `node_modules`, плюс `global.json`, `Directory.Build.props`, `Directory.Packages.props`. TypeScript и JSONC не входы - [x] `run-aspire.cmd` вызывает проверку; при 0 — `dotnet run --no-build` и пишет, что сборка пропущена; иначе `dotnet build`, затем `--no-build`. `--rebuild` всегда собирает и не уходит в AppHost. `-c` / `--configuration` выбирают папку `bin` - [x] `LaunchBuildStamp` с теми же правилами, тесты на временных папках без `AppHostFixture` - [x] `AGENTS.md` и `README.md`: повторный запуск без правок — `run-aspire.cmd`; голый `dotnet run` по-прежнему собирает. `--rebuild` упомянут ## Тесты, без которых фаза не закрыта - [x] Нет dll — нужно собирать - [x] Dll новее всех входов — пропускать - [x] `.cs` новее dll — собирать - [x] `.ts` или `.jsonc` новее dll — пропускать - [x] Файл в `bin` / `obj` / `node_modules` не считается входом - [x] `Directory.Packages.props` новее dll — собирать - [x] `-c Release` смотрит `bin/Release`, а не Debug ## Критерий готовности - Два запуска `run-aspire.cmd` подряд без правок: второй пишет, что сборка пропущена, и стартует AppHost - `run-aspire.cmd --rebuild` собирает даже со свежими dll - `dotnet test` проходит; тесты штампа не поднимают хост ## Стоп Не менять Aspire-граф, протокол, сейвы. Не вшивать `--no-build` в голый `dotnet run`. Не сканировать `tests/` и не считать клиентский TS поводом пересобрать сервер.