Міграція
Оновлення до Doconut на .NET 8
Дві міграції розглядаються на цій сторінці: оновлення версії пакету у .NET 8 та перенесення інтеграції зі старішого фреймворку Doconut (.NET 6, .NET Standard 2.0, .NET Framework 4.7) на API .NET 8.
Оновлення версії пакету
- Оновіть пакет (і будь‑які пакети‑плагіни — тримайте їхні версії синхронізованими):
bash
dotnet add package Doconut.NET8
dotnet add package Doconut.NET8.Dicom- Перевірте вікно ліцензії. Ліцензія охоплює діапазон версій. Якщо нова версія виходить за його межі, відкриття блокується —
OpenDocumentAsyncвикидаєLicenseException(fail‑fast); вона не повертається до водяного знака, іIsVersionValidповертаєfalse. Оновіть, замініть файл.licі перезапустіть застосунок, щобAddDoconut()завантажив нову ліцензію. - Перебудуйте та дозвольте NuGet відновити зазначені версії залежностей — не закріплюйте
System.Text.JsonабоSystem.Drawing.Common(див. розділ Troubleshooting для точних помилок, які виникають при пониженні версії). - Проведіть smoke‑тест одного документа кожного формату, який ви використовуєте.
Перенесення з .NET 6 / .NET Standard 2.0
API .NET 8 — це нова архітектура навколо DI та async. Відповідність:
| Питання | .NET 6 / Standard 2.0 | .NET 8 |
|---|---|---|
| Налаштування | Конструктор Viewer(cache, httpContextAccessor, licensePath) | builder.Services.AddDoconut(options => …) + ін’єкція Viewer |
| Ліцензія | Статичний Viewer.DoconutLicense(path) + SetLicensePlugin(...) для кожного плагіна | options.LicensePath / LicenseContent / LicenseStream — одна ліцензія, авто‑виявлення файлів плагінів |
| Відкриття | viewer.OpenDocument(...) (синхронно) | await viewer.OpenDocumentAsync(...) |
| Закриття | viewer.CloseDocument() або viewer.Dispose() | viewer.CloseDocument(token) — Viewer не є IDisposable |
| Тривалість | Viewer реалізує IDisposable, тримає відкритий документ | Viewer без стану; сесії живуть у кеші під токенами |
| Конвертер | Властивість viewer.Converter | Плагін Converter (AddPlugin<ConverterPlugin>()) + сервіс DocumentConverter |
| Класи конфігурації | Простори імен Doconut.Configs.View.* | Всі в просторі імен Doconut |
| Middleware | Ручне підключення обробників | app.UseDoconutResources() + app.UseDoconut() |
Типовий приклад «до/після»:
text
// .NET 6 (старий API, наведено для порівняння — не працює в .NET 8)
using var viewer = new Viewer(cache, httpContextAccessor, "wwwroot/Doconut.Viewer.lic");
var token = viewer.OpenDocument(path, new PdfConfig { AllowSearch = true }, new DocOptions());csharp
// .NET 8 — Viewer ін’єковано, ліцензію налаштовано один раз у AddDoconut()
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { AllowSearch = true });Перенесення з .NET Framework 4.7 (Web Forms)
Viewer у 4.7 — це WebControl; .NET 8 замінює модель контролів на middleware + DI‑службу:
- Контрол
<doconut:DocViewer runat=server>зникає — сторінка розміщує паруdiv‑віджетів, а ваш endpoint повертає токен (швидкий старт демонструє цей шаблон). - Статичні методи ліцензії → джерела ліцензій у
DoconutOptions. - Синхронний
OpenDocument→await OpenDocumentAsync. Viewer.ReferenceScripts()/ReferenceCss()присутні в обох світах — у .NET 8 вони приймають об’єктиScriptConfig/CssConfigі підлягають ліцензійному контролю.- Властивості контролу (
ShowThumbs,PageZoom,FixedZoom, …) → ті ж назви уViewerConfig/ параметрах JS‑віджетуdocViewer. - Методи експорту, що повертають
byte[]→ асинхронні API експорту анотацій уViewer.
Плануйте це як переписування шару хостингу навколо незмінної концепції: відкриття → токен → віджет.
Примітка щодо назви
У всіх фреймворках клас називається Viewer — якщо ви натрапляєте на DocumentViewer у старих фрагментах коду або сторонніх статтях, такого типу в SDK ніколи не існувало.
Чек‑лист міграції
- Замініть пакети; вирівняйте версії пакетів‑плагінів.
- Перенесіть налаштування ліцензії у
AddDoconut(); видаліть статичні виклики ліцензії. - Перетворіть виклики відкриття на асинхронні; замініть
Dispose/CloseDocumentбез параметрів наCloseDocument(token). - Замініть використання
viewer.Converterна реєстрацію плагіна Converter +DocumentConverter. - Перепровірте шлях безпеки:
AddSession()/UseSession()тепер обов’язкові за замовчуванням.
Чи була ця сторінка корисною?