Migration

Uppgradera till Doconut på .NET 8

Två migreringar finns på den här sidan: uppgradering av paketversionen inom .NET 8, och flytt av en integration från ett äldre Doconut-ramverk (.NET 6, .NET Standard 2.0, .NET Framework 4.7) till .NET 8 API:et.

Uppgradera paketversionen

  1. Uppdatera paketet (och eventuella pluginpaket — håll versionerna synkroniserade):
bash
dotnet add package Doconut.NET8
dotnet add package Doconut.NET8.Dicom
  1. Kontrollera licensfönstret. En licens täcker ett versionsintervall. Om den nya versionen ligger utanför, blockeras öppning — OpenDocumentAsync kastar LicenseException (fail-fast); den återgår inte till ett vattenmärke, och IsVersionValid blir false. Förnya, ersätt .lic-filen och starta om applikationen så att AddDoconut() laddar den nya licensen.

  2. Bygg om och låt NuGet återställa de deklarerade beroendeversionerna — åter-pinna inte System.Text.Json eller System.Drawing.Common (se Felsökning för de exakta fel som en nedgradering orsakar).

  3. Utför ett snabbt test med ett dokument per formatfamilj du använder.

Migrera från .NET 6 / .NET Standard 2.0

.NET 8 API:et är en omdesign kring DI och asynkronitet. Mappningen:

Aspekt.NET 6 / Standard 2.0.NET 8
InställningConstruct Viewer(cache, httpContextAccessor, licensePath)builder.Services.AddDoconut(options => …) + inject Viewer
LicensStatic Viewer.DoconutLicense(path) + SetLicensePlugin(...) per pluginoptions.LicensePath / LicenseContent / LicenseStream — one license, auto-discovery for plugin files
Öppnaviewer.OpenDocument(...) (synchronous)await viewer.OpenDocumentAsync(...)
Stängviewer.CloseDocument() or viewer.Dispose()viewer.CloseDocument(token) — Viewer is not IDisposable
LivstidViewer implements IDisposable, holds the open documentViewer is stateless; sessions live in the cache under tokens
Konverterareviewer.Converter propertyConverter‑pluginet (AddPlugin<ConverterPlugin>()) + DocumentConverter‑tjänsten
KonfigurationsklasserDoconut.Configs.View.* namespacesAllt i Doconut‑namnutrymmet
MellanprogramvaraManual handler wiringapp.UseDoconutResources() + app.UseDoconut()

Ett typiskt före/efter:

text
// .NET 6 (gammalt API, visas för jämförelse — giltigt inte på .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 injicerad, licens konfigurerad en gång i AddDoconut()
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { AllowSearch = true });

Migrera från .NET Framework 4.7 (Web Forms)

4.7‑versionens Viewer är en WebControl; .NET 8 ersätter kontrollmodellen med middleware + en DI‑tjänst:

  • <doconut:DocViewer runat=server>‑kontrollen försvinner — sidan hostar widget‑div‑paret och ditt endpoint returnerar token (Quick Start visar mönstret).
  • Statiska licensmetoder → DoconutOptions licenskällor.
  • Synkron OpenDocument → await OpenDocumentAsync.
  • Viewer.ReferenceScripts() / ReferenceCss() finns i båda världarna — .NET 8‑versionerna tar ScriptConfig/CssConfig‑objekt och är licensstyrda.
  • Kontrollegenskaper (ShowThumbs, PageZoom, FixedZoom, …) → samma namn på ViewerConfig / docViewer‑JS‑alternativen.
  • Exportmetoder som returnerar byte[] → de asynkrona annoterings‑export‑API:erna på Viewer.

Planera detta som en omskrivning av värdslagret kring ett oförändrat koncept: öppna → token → widget.

Namnnotering

I alla ramverk är klassen Viewer — om du hittar DocumentViewer i gamla kodsnuttar eller tredjepartsartiklar, har den typen aldrig funnits i SDK:et.

Migrationschecklista

  1. Byt paket; synkronisera pluginpaketens versioner.
  2. Flytta licensinställningarna till AddDoconut(); ta bort statiska licensanrop.
  3. Gör öppningsanrop asynkrona; ersätt Dispose/parameterlös CloseDocument med CloseDocument(token).
  4. Ersätt viewer.Converter‑användningar med registrering av Converter‑pluginet + DocumentConverter.
  5. Testa säkerhetsvägen igen: AddSession()/UseSession() krävs nu med standard säkerhet (plus AddDistributedMemoryCache() i en minimal‑API‑app).

Var den här sidan hjälpsam?