Migracja

Upgrade to Doconut on .NET 8

Na tej stronie znajdują się dwie migracje: aktualizacja wersji pakietu w .NET 8 oraz przeniesienie integracji ze starszego frameworka Doconut (.NET 6, .NET Standard 2.0, .NET Framework 4.7) na API .NET 8.

Aktualizacja wersji pakietu

  1. Zaktualizuj pakiet (oraz wszystkie pakiety wtyczek — utrzymaj wersje zgodne):
bash
dotnet add package Doconut.NET8
dotnet add package Doconut.NET8.Dicom
  1. Sprawdź okno licencji. Licencja obejmuje zakres wersji. Jeśli nowa wersja znajduje się poza tym zakresem, otwieranie jest zablokowaneOpenDocumentAsync rzuca LicenseException (szybkie zakończenie); nie przechodzi do znaku wodnego, a IsVersionValid zwraca false. Odnów, wymień plik .lic i uruchom ponownie aplikację, aby AddDoconut() załadował nową licencję.

  2. Przebuduj i pozwól NuGet przywrócić zadeklarowane wersje zależności — nie przypinaj ponownie System.Text.Json ani System.Drawing.Common (zobacz sekcję Rozwiązywanie problemów, aby poznać dokładne błędy spowodowane degradacją wersji).

  3. Wykonaj test dymny jednego dokumentu dla każdej rodziny formatów, której używasz.

Migracja z .NET 6 / .NET Standard 2.0

API .NET 8 to przedefiniowanie wokół DI i asynchroniczności. Mapowanie:

Kwestia.NET 6 / Standard 2.0.NET 8
SetupConstruct Viewer(cache, httpContextAccessor, licensePath)builder.Services.AddDoconut(options => …) + inject Viewer
LicenseStatic Viewer.DoconutLicense(path) + SetLicensePlugin(...) per pluginoptions.LicensePath / LicenseContent / LicenseStream — one license, auto-discovery for plugin files
Openviewer.OpenDocument(...) (synchronous)await viewer.OpenDocumentAsync(...)
Closeviewer.CloseDocument() or viewer.Dispose()viewer.CloseDocument(token)Viewer is not IDisposable
LifetimeViewer implements IDisposable, holds the open documentViewer is stateless; sessions live in the cache under tokens
Converterviewer.Converter propertyThe Converter plugin (AddPlugin<ConverterPlugin>()) + the DocumentConverter service
Config classesDoconut.Configs.View.* namespacesAll in the Doconut namespace
MiddlewareManual handler wiringapp.UseDoconutResources() + app.UseDoconut()

Typowy przykład przed/po:

text
// .NET 6 (old API, shown for contrast — not valid on .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 injected, license configured once in AddDoconut()
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { AllowSearch = true });

Migracja z .NET Framework 4.7 (Web Forms)

Viewer w wersji 4.7 jest WebControl; .NET 8 zastępuje model kontrolki pośrednikiem + usługą DI:

  • Kontrolka <doconut:DocViewer runat=server> znika — strona hostuje parę elementów div widgetu, a Twój punkt końcowy zwraca token (Quick Start pokazuje ten wzorzec).
  • Statyczne metody licencji → źródła licencji DoconutOptions.
  • Synchroniczne OpenDocumentawait OpenDocumentAsync.
  • Viewer.ReferenceScripts() / ReferenceCss() istnieją w obu światach — wersje .NET 8 przyjmują obiekty ScriptConfig/CssConfig i są zabezpieczone licencją.
  • Właściwości kontrolki (ShowThumbs, PageZoom, FixedZoom, …) → te same nazwy w ViewerConfig / opcjach JS docViewer.
  • Metody eksportu zwracające byte[] → asynchroniczne API eksportu adnotacji w Viewer.

Zaplanuj to jako przepisanie warstwy hostującej wokół niezmienionego konceptu: otwarcie → token → widget.

Uwaga dotycząca nazewnictwa

We wszystkich frameworkach klasa to Viewer — jeśli znajdziesz DocumentViewer w starych fragmentach kodu lub artykułach firm trzecich, ten typ nigdy nie istniał w SDK.

Lista kontrolna migracji

  1. Zamień pakiety; dopasuj wersje pakietów wtyczek.
  2. Przenieś konfigurację licencji do AddDoconut(); usuń statyczne wywołania licencji.
  3. Uczyń wywołania otwierania asynchronicznymi; zamień Dispose/CloseDocument bez parametrów na CloseDocument(token).
  4. Zastąp użycia viewer.Converter rejestracją wtyczki Converter + DocumentConverter.
  5. Ponownie przetestuj ścieżkę bezpieczeństwa: AddSession()/UseSession() są teraz wymagane przy domyślnym zabezpieczeniu.

Czy ta strona była pomocna?