Migration
Upgrade auf Doconut unter .NET 8
Zwei Migrationen werden auf dieser Seite behandelt: Upgrade der Paketversion innerhalb von .NET 8 und Verschieben einer Integration von einem älteren Doconut‑Framework (.NET 6, .NET Standard 2.0, .NET Framework 4.7) auf die .NET 8‑API.
Upgrade der Paketversion
- Aktualisieren Sie das Paket (und alle Plugin‑Pakete — halten Sie die Versionen abgestimmt):
dotnet add package Doconut.NET8
dotnet add package Doconut.NET8.Dicom- Überprüfen Sie das Lizenzfenster. Eine Lizenz deckt einen Versionsbereich ab. Wenn die neue Version außerhalb liegt, wird das Öffnen blockiert —
OpenDocumentAsyncwirftLicenseException(Fail‑Fast); es fällt nicht auf ein Wasserzeichen zurück, undIsVersionValidwird zufalse. Erneuern Sie die Lizenz, ersetzen Sie die.licund starten Sie die Anwendung neu, damitAddDoconut()die neue Lizenz lädt. - Erstellen Sie neu und lassen Sie NuGet die deklarierten Abhängigkeitsversionen wiederherstellen — pinnen Sie
System.Text.JsonoderSystem.Drawing.Commonnicht erneut (siehe Fehlersuche für die genauen Fehler, die ein Downgrade verursacht). - Führen Sie einen Smoke‑Test mit einem Dokument pro von Ihnen genutzter Formatfamilie durch.
Migration von .NET 6 / .NET Standard 2.0
Die .NET 8‑API ist ein Neugestaltung rund um DI und asynchronen Betrieb. Die Zuordnung:
| Aspekt | .NET 6 / Standard 2.0 | .NET 8 |
|---|---|---|
| Setup | Erzeugen Sie Viewer(cache, httpContextAccessor, licensePath) | builder.Services.AddDoconut(options => …) + Inject Viewer |
| License | Statische Viewer.DoconutLicense(path) + SetLicensePlugin(...) pro Plugin | options.LicensePath / LicenseContent / LicenseStream — eine Lizenz, automatische Erkennung von Plugin‑Dateien |
| Open | viewer.OpenDocument(...) (synchron) | await viewer.OpenDocumentAsync(...) |
| Close | viewer.CloseDocument() oder viewer.Dispose() | viewer.CloseDocument(token) — Viewer ist nicht IDisposable |
| Lifetime | Viewer implementiert IDisposable und hält das geöffnete Dokument | Viewer ist zustandslos; Sitzungen leben im Cache unter Tokens |
| Converter | viewer.Converter‑Eigenschaft | Das Converter‑Plugin (AddPlugin<ConverterPlugin>()) + der DocumentConverter‑Service |
| Config‑Klassen | Doconut.Configs.View.*‑Namensräume | Alles im Doconut‑Namensraum |
| Middleware | Manuelle Handler‑Verkettung | app.UseDoconutResources() + app.UseDoconut() |
Ein typisches Vorher/Nachher:
// .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());// .NET 8 — Viewer injected, license configured once in AddDoconut()
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { AllowSearch = true });Migration von .NET Framework 4.7 (Web Forms)
Der Viewer in Version 4.7 ist ein WebControl; .NET 8 ersetzt das Steuerungsmodell durch Middleware + einen DI‑Dienst:
- Das
<doconut:DocViewer runat=server>‑Steuerelement verschwindet — die Seite hostet das Widget‑div‑Paar und Ihr Endpunkt gibt das Token zurück (Quick Start zeigt das Muster). - Statische Lizenzmethoden → Lizenzquellen in
DoconutOptions. - Synchrones
OpenDocument→await OpenDocumentAsync. Viewer.ReferenceScripts()/ReferenceCss()existieren in beiden Welten — die .NET 8‑Versionen akzeptierenScriptConfig/CssConfig‑Objekte und sind lizenzgesteuert.- Steuerelementeigenschaften (
ShowThumbs,PageZoom,FixedZoom, …) → dieselben Namen inViewerConfig/ dendocViewer‑JS‑Optionen. - Export‑Methoden, die
byte[]zurückgeben → die asynchronen Annotation‑Export‑APIs imViewer.
Planen Sie dies als eine Neuschreibung der Hosting‑Schicht um ein unverändertes Konzept: öffnen → Token → Widget.
Hinweis zur Namensgebung
In allen Frameworks ist die Klasse Viewer — wenn Sie DocumentViewer in alten Code‑Snippets oder Artikeln von Drittanbietern finden, hat dieser Typ im SDK nie existiert.
Migrations‑Checkliste
- Pakete austauschen; Plugin‑Paketversionen angleichen.
- Lizenz‑Setup in
AddDoconut()verschieben; statische Lizenzaufrufe entfernen. - Öffnungs‑Aufrufe asynchron machen;
Dispose/parameterlosesCloseDocumentdurchCloseDocument(token)ersetzen. viewer.Converter‑Verwendungen durch die Registrierung des Converter‑Plugins +DocumentConverterersetzen.- Den Sicherheits‑Pfad erneut testen:
AddSession()/UseSession()sind jetzt mit Standard‑Sicherheit erforderlich.
War diese Seite hilfreich?