Files
ssh-access-tui/outlook-bulk-sender/docs/BUILD.md
T
2026-07-23 12:38:13 +03:00

9.3 KiB
Raw Blame History

Сборка и подключение 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-проектами в целом, а не по факту увиденной ошибки в этом конкретном решении.