# Сборка и подключение BulkArchiveMailer Это решение написано и ни разу не собрано в среде без Windows/Visual Studio/.NET SDK — весь код написан вручную по памяти о реальных VSTO/Outlook Interop API, но **первая сборка обязательно должна пройти на вашей машине**, прежде чем этому плагину можно будет доверять. Ниже — пошаговая инструкция и список мест, где по опыту чаще всего что-то не сходится при первом открытии вручную написанного `.csproj`. ## Требования - Windows 10/11. - Классический Outlook (Win32 или Microsoft 365 C2R) — **не** "новый Outlook" (он не поддерживает VSTO). - Visual Studio 2022 (Community — бесплатная) с установленным workload'ом **".NET desktop development"** И **"Office/SharePoint development"** (последний ставит шаблоны VSTO, VSTO Runtime и Office Developer Tools — без него сборка `BulkArchiveMailer.AddIn` не найдёт `Microsoft.Office.Tools.*` сборки). - Установленный **VSTO Runtime** (обычно ставится вместе с Office/SharePoint workload'ом; если Outlook жалуется на "not a valid Office Add-in" при загрузке — скорее всего он не установлен отдельно, доустановите "Microsoft Visual Studio 2010 Tools for Office Runtime" / актуальную версию VSTO Runtime). ## Открытие и сборка 1. Откройте `BulkArchiveMailer.sln` в Visual Studio. 2. Дайте NuGet восстановить пакеты (`BulkArchiveMailer.Core.Tests` тянет xUnit + `Microsoft.NET.Test.Sdk`; `BulkArchiveMailer.Core` и `BulkArchiveMailer.AddIn` NuGet-пакетов не используют вовсе — это осознанное решение, см. `AppSettings.cs`, чтобы не зависеть от восстановления пакетов в непроверенной среде). 3. Соберите решение (Build → Build Solution). Скорее всего первая сборка пройдёт чисто, но если нет — см. раздел "Типичные проблемы" ниже. 4. `BulkArchiveMailer.Core.Tests` можно запустить через Test Explorer — там сейчас один smoke-тест (`FilenameParserTests`), подтверждающий, что тестовый проект в принципе собирается и видит `Core`. Полное покрытие тестами — отдельная задача (dotnet-tester), не часть этой сборки. ## Отладка (F5) Проект `BulkArchiveMailer.AddIn` настроен как VSTO Outlook Add-in — при нажатии F5 (с ним как стартовым проектом) Visual Studio должна сама зарегистрировать временную запись в реестре и запустить Outlook с уже загруженным плагином. Если Outlook уже был открыт — закройте его перед F5. Кнопка ленты **"Массовая рассылка"** появляется на вкладке "Главная" основного окна Outlook (список писем), в группе "ssh-access-tui". ## Установка вне Visual Studio (ручной sideload) Это внутренний инструмент, поэтому здесь используется **sideload через реестр**, а не полноценная публикация ClickOnce с веб-сервером или раскатка через GPO (это отдельная задача на будущее, если понадобится массово ставить плагин большому числу операторов). 1. Соберите решение в конфигурации Release (Build → Configuration Manager → Release, затем Build Solution). 2. В `BulkArchiveMailer.AddIn\bin\Release\` после сборки появятся, среди прочего, `BulkArchiveMailer.AddIn.dll` и `BulkArchiveMailer.AddIn.vsto` (манифест генерируется автоматически MSBuild-таргетами VSTO — в исходниках его нет и не должно быть, `.gitignore` его игнорирует). 3. Скопируйте всю папку `bin\Release\` в постоянное место на диске оператора (например, `C:\Tools\BulkArchiveMailer\`) — VSTO plug-in должен запускаться из стабильного пути, а не из папки сборки, которая может быть пересобрана/удалена. 4. Добавьте ключ реестра, которым Outlook находит плагин: ``` [HKEY_CURRENT_USER\Software\Microsoft\Office\Outlook\Addins\BulkArchiveMailer.AddIn] "Description"="Массовая рассылка архивов ssh-access-tui" "FriendlyName"="BulkArchiveMailer" "Manifest"="file:///C:\\Tools\\BulkArchiveMailer\\BulkArchiveMailer.AddIn.vsto|vstolocal" "LoadBehavior"=dword:00000003 ``` (можно сохранить как `.reg`-файл и применить двойным щелчком). 5. Запустите Outlook. Поскольку манифест не подписан сертификатом (`SignManifests=false` в `.csproj` — см. комментарий там же о причине), при первой загрузке Outlook, скорее всего, покажет предупреждение "не удалось проверить издателя" или подобное. Варианты: - принять предупреждение вручную (для одного оператора это разумно); - добавить папку с плагином в доверенные расположения для VSTO: `HKEY_CURRENT_USER\Software\Microsoft\VSTO\Security\Trust Manager\TrustedFolders\<любой уникальный ключ>` = путь к папке с `.vsto`, `String` REG_SZ. - для более широкой раскатки — подписать манифест сертификатом (Project Properties → Signing в Visual Studio) и настроить доверие централизованно (GPO/сертификат в доверенных издателях) — это уже упомянутое будущее развитие, не сделано в этой версии. ## Типичные проблемы при первом открытии Поскольку `.csproj`/`.sln` в этом решении написаны вручную (без мастера Visual Studio, из-за отсутствия здесь Windows/VS/.NET SDK для генерации), возможны мелкие расхождения с тем, что сгенерировал бы реальный мастер "Outlook VSTO Add-in". Если сборка `BulkArchiveMailer.AddIn` падает на ссылках `Microsoft.Office.*`/`Microsoft.VisualStudio.Tools.*`: 1. Проверьте, что workload "Office/SharePoint development" точно установлен (Visual Studio Installer → Modify). 2. Если конкретная ссылка подсвечена жёлтым в Solution Explorer — правой кнопкой на неё → Properties → сверьте путь; как правило, достаточно удалить и заново добавить через Add Reference → Assemblies → Extensions, найдя те же имена (`Microsoft.Office.Tools.Outlook` и т.д.) — они должны там появиться, если workload установлен. 3. Если `Microsoft.Office.Interop.Outlook`/`office` не резолвятся с версией `15.0.0.0` — это нормально расходится в зависимости от того, какая версия Office PIA установлена; смените `Version=` в ссылке (в `.csproj`, ищите `Microsoft.Office.Interop.Outlook`/`office`) на установленную (`14.0.0.0` для Office 2010 PIA и т.п.) либо просто удалите атрибут версии в Solution Explorer и добавьте заново через Add Reference — Visual Studio подставит то, что реально стоит на машине. 4. TargetFrameworkVersion `v4.8` требует установленного .NET Framework 4.8 Developer Pack — Visual Studio предложит установить его сама при открытии, если его нет. Ничего из перечисленного не проверялось вживую — список составлен по опыту работы с VSTO-проектами в целом, а не по факту увиденной ошибки в этом конкретном решении.