Надстройка RevitTestHost собирается под Revit с 2020 по 2027. Среда выполнения у этих версий разная, поэтому под каждый год собирается отдельная сборка надстройки: API Revit различается между годами.
| Revit | Среда выполнения | Платформа надстройки | Собирается | Проверено вживую |
|---|---|---|---|---|
| 2020 | .NET Framework 4.7 | net47 | да | да, Revit 2020.2 |
| 2021 | .NET Framework 4.8 | net48 | да | не проверено |
| 2022 | .NET Framework 4.8 | net48 | да | да, Revit 2022.1 |
| 2023 | .NET Framework 4.8 | net48 | да | не проверено |
| 2024 | .NET Framework 4.8 | net48 | да | не проверено |
| 2025 | .NET 8 | net8.0-windows | да | да, Revit 2025.1 |
| 2026 | .NET 8 | net8.0-windows | да | не проверено |
| 2027 | .NET 10 | net10.0-windows | да | да, Revit 2027.2 |
Столбец «Собирается» означает, что надстройка и пример компилируются против Revit API этого года (это проверяет CI). Столбец «Проверено вживую» заполняется по результатам живых прогонов: на отмеченных годах прошли смоук режима сервера и все 18 контрактных тестов RevitUITesting (прогон 2026-10-16, английский интерфейс). Сборка net10.0-windows загружается и работает в Revit 2027.2.
Отличия годов, которые учитывают надстройка и библиотека:
- Revit 2027 не загружает манифесты надстроек из
%ProgramData%, поэтому для 2027 используется папка пользователя%AppData%\Autodesk\Revit\Addins\2027\. - В Revit 2025 и новее кнопки вкладок ленты лежат в контейнере
mMainTabs, а в дереве UI Automation есть содержимое только активной вкладки (RevitIds.Ribbon.TabStripId,TabContentDepth). - В Revit 2025 и новее кнопки встроенных панелей ленты видны снаружи только после того, как внутри процесса созданы peer UI Automation. Это делает надстройка в режиме сервера (
AutomationPeerWarmer).
Год задаёт параметр RevitVersion, платформа выбирается автоматически (таблица в build/RevitVersion.props). Без параметра собирается Revit 2022.
dotnet build src/RevitTestHost.Addin/RevitTestHost.Addin.csproj -c Release -p:RevitVersion=2025Сборка в конфигурации Debug дополнительно копирует надстройку в %ProgramData%\Autodesk\Revit\Addins\<год>\, для 2027 в %AppData%\Autodesk\Revit\Addins\2027\: Revit 2027 не загружает манифесты из %ProgramData%. В релизе для каждого года есть готовый архив RevitTestHost-Addin-<версия>-Revit<год>.zip, его содержимое распаковывается в ту же папку. Установщик RevitTestHost-Addin-<версия>.msi содержит все годы и ставит надстройку для текущего пользователя в %AppData%\Autodesk\Revit\Addins\<год>\ для каждого установленного Revit.
Для Revit 2020 нужен .NET Framework 4.7.2 или новее (так бывает на любой поддерживаемой Windows 10): SDK собран как netstandard2.0.
Тестовая сборка должна иметь ту же среду выполнения, что и Revit этого года, и лежать в TestHost\Tests\ с именем *Tests.dll. Пакет RevitTestHost.Sdk (netstandard2.0) подходит для всех годов.
| Revit | Платформа тестового проекта |
|---|---|
| 2020 | net47 |
| 2021 до 2024 | net48 |
| 2025, 2026 | net8.0-windows |
| 2027 | net10.0-windows |
Для нескольких лет сразу укажите несколько платформ в TargetFrameworks.
В Revit 2025 и новее надстройка работает на .NET 8 или .NET 10. Каждая тестовая сборка загружается в собственный контекст загрузки (TestLoadContext). Сборки RevitTestHost.Sdk и RevitTestHost.Core контекст берёт у надстройки, поэтому тестовая сборка и надстройка видят одни и те же типы, даже если рядом с тестами лежит своя копия Sdk. Зависимости тестовой сборки ищутся так: уже загруженное в Revit (RevitAPI и другие сборки Revit), затем .deps.json тестовой сборки, затем файл рядом с ней. В живом Revit 2025 и новее это не проверялось: поведение подтверждено только модульными тестами.
Библиотека RevitUITesting работает снаружи Revit и не зависит от года на уровне кода. Год задаёт revitVersion в revit-ui-tests.json (или REVIT_UI_REVIT_VERSION), он определяет путь к Revit.exe и ключ реестра доверия к надстройкам. Идентификаторы и подписи интерфейса проверены на Revit 2022.1, на других годах они могут отличаться: это показывают контрактные тесты (Category=RevitContract), которые теперь пишут файлы доказательств <имя>-<год>.txt.