32 lines
2.1 KiB
Markdown
32 lines
2.1 KiB
Markdown
Часть [Вне очереди](README.md). Соседей по папке не читать, если задача не про них.
|
||
|
||
# Пропуск сборки при запуске
|
||
|
||
### Зачем
|
||
|
||
`run-aspire.cmd` каждый раз вызывает `dotnet run`, а тот — MSBuild графа Aspire, даже когда
|
||
исходники не менялись. Повторный запуск после Ctrl+C стоит десятки секунд впустую: SDK
|
||
пересчитывает хост, хотя dll на месте.
|
||
|
||
### Было / Стало / Почему
|
||
|
||
**Было.** Скрипт всегда `dotnet run --project src/HSchool.AppHost`. Аргументы проходили насквозь.
|
||
|
||
**Стало.** Если `HSchool.AppHost.dll` и `HSchool.Server.dll` новее входов (C#, csproj, props,
|
||
`global.json`), скрипт делает `dotnet run --no-build`. Иначе — `dotnet build`, потом `--no-build`.
|
||
`--rebuild` собирает всегда. Конфигурация (`-c` / `--configuration`) выбирает, какие dll сравнивать;
|
||
по умолчанию Debug, как у `dotnet run`.
|
||
|
||
**Почему.** Инкрементальный MSBuild всё равно оценивает Aspire SDK. `--no-build` это пропускает.
|
||
Клиентский TypeScript и JSONC модов не входы: Vite и каталог читают диск (`ContentRoot`), а не
|
||
`bin`. Тестовые проекты AppHost не ссылается — их правки запуск не пересобирают.
|
||
|
||
Правила «устарел ли билд» живут в `tools/apphost-uptodate.ps1` (то, что вызывает `run-aspire.ps1`) и в
|
||
`LaunchBuildStamp` (то, что проверяют тесты). Менять надо оба.
|
||
|
||
### Что не входит
|
||
|
||
Голый `dotnet run --project src/HSchool.AppHost` по-прежнему собирает — так удобнее агентам с
|
||
грязным деревом. Linux-обёртки нет: точка входа Windows — `.cmd`. Протокол, HTTP и сейв не
|
||
трогаем.
|