| 1 | # Fundamentals: сборка, References и vendor API (v1) |
| 2 | |
| 3 | **Мир:** `engineering.cad` |
| 4 | |
| 5 | --- |
| 6 | |
| 7 | ## Scope |
| 8 | |
| 9 | Как в типичном workspace CAD-команды устроены **References**, **снимки DLL**, **HintPath** и **конфигурации** — без конкретных путей диска. |
| 10 | |
| 11 | --- |
| 12 | |
| 13 | ## Core concepts |
| 14 | |
| 15 | ### 1) Два слоя зависимостей |
| 16 | |
| 17 | | Слой | Содержимое | Назначение | |
| 18 | |------|------------|------------| |
| 19 | | **References (git)** | ObjectArx headers, Autodesk/nanoCAD interop, EPPlus, OpenXml, … | Общие бинарники и заголовки для всех продуктов | |
| 20 | | **Product References** (напр. Aveva) | `Aveva.*.dll` по папкам версий продукта | API конкретных релизов E3D/ADM/TAGS | |
| 21 | | **NuGet** (напр. Tekla) | `TeklaOpenAPI` | Версионированный Open API | |
| 22 | |
| 23 | ### 2) Паттерн HintPath «установка ИЛИ снимок» |
| 24 | |
| 25 | ```xml |
| 26 | <HintPath Condition="Exists('C:\Program Files\…\vendor.dll')">…</HintPath> |
| 27 | <HintPath Condition="Exists('..\..\References\…\vendor.dll')">…</HintPath> |
| 28 | ``` |
| 29 | |
| 30 | - CI/разработчик **без** установленного САПР собирает по снимку в repo. |
| 31 | - С установленным продуктом — предпочтение Program Files (актуальнее interop). |
| 32 | |
| 33 | ### 3) Конфигурации = продукт + TFM |
| 34 | |
| 35 | - Имя `Debug_E3D310` / `Release_NC23.1_net48` кодирует **целевой хост**. |
| 36 | - `DefineConstants` включают тег продукта для `#if` и условных ссылок. |
| 37 | - Один solution может собирать **десятки** конфигураций — выбирать одну осознанно. |
| 38 | |
| 39 | ### 4) ObjectARX headers |
| 40 | |
| 41 | - Папки по **году SDK** (`inc/`), не по году AutoCAD напрямую — но соответствие таблице Autodesk обязательно проверять по документации. |
| 42 | |
| 43 | ### 5) SDK / Help (концептуально) |
| 44 | |
| 45 | - Папка **SDK** в workspace часто зарезервирована под **CHM/PDF/примеры** вендора. |
| 46 | - Может быть пустой на share — тогда справка с **установки САПР** или портала вендора. |
| 47 | - **References ≠ SDK**: References — для **компиляции**; SDK — для **чтения человеком**. |
| 48 | |
| 49 | ### 6) Что не класть в обобщённый KB |
| 50 | |
| 51 | - Строки подключения к корпоративным SQL для телеметрии утилит. |
| 52 | - UNC-пути, внутренние wiki, имена серверов. |
| 53 | - Проектные модели заказчика. |
| 54 | |
| 55 | --- |
| 56 | |
| 57 | ## Anti-patterns |
| 58 | |
| 59 | - Коммитить пароли в `ConnStr.txt` — только шаблон + локальный файл в деплое. |
| 60 | - Смешивать DLL разных версий Aveva в одну папку output. |
| 61 | - Ожидать, что пустая папка Autodesk в References заполнится сама — часто DLL копируют с установки один раз. |
| 62 | |
| 63 | --- |
| 64 | |
| 65 | ## Links |
| 66 | |
| 67 | - [software-dotnet-csharp/kb-dotnet-fundamentals-v1.md](../software-dotnet-csharp/kb-dotnet-fundamentals-v1.md) |
| 68 | |
| 69 | **Версия:** v1.0 · 2026-06-04 |
| 70 | |