Migrazione

Aggiornamento a Doconut su .NET 8

Due migrazioni sono presenti in questa pagina: aggiornamento della versione del pacchetto su .NET 8, e spostamento di un'integrazione da un framework Doconut più vecchio (.NET 6, .NET Standard 2.0, .NET Framework 4.7) sull'API .NET 8.

Aggiornamento della versione del pacchetto

  1. Aggiorna il pacchetto (e tutti i pacchetti plugin — mantieni le versioni allineate):
bash
dotnet add package Doconut.NET8
dotnet add package Doconut.NET8.Dicom
  1. Verifica la finestra di licenza. Una licenza copre un intervallo di versioni. Se la nuova versione cade al di fuori di esso, l'apertura è bloccata — OpenDocumentAsync lancia LicenseException (fail-fast); non ricade in un watermark, e IsVersionValid diventa false. Rinnova, sostituisci il file .lic e riavvia l'applicazione in modo che AddDoconut() carichi la nuova licenza.
  2. Ricompila e lascia che NuGet ripristini le versioni delle dipendenze dichiarate — non fissare nuovamente System.Text.Json o System.Drawing.Common (vedi Risoluzione dei problemi per gli errori esatti che causa un downgrade).
  3. Esegui un test rapido su un documento per ogni famiglia di formati che utilizzi.

Migrazione da .NET 6 / .NET Standard 2.0

L'API .NET 8 è una riprogettazione basata su DI e async. La mappatura:

Aspetto.NET 6 / Standard 2.0.NET 8
ConfigurazioneCostruisci Viewer(cache, httpContextAccessor, licensePath)builder.Services.AddDoconut(options => …) + inietta Viewer
LicenzaStatica Viewer.DoconutLicense(path) + SetLicensePlugin(...) per pluginoptions.LicensePath / LicenseContent / LicenseStream — una licenza, scoperta automatica dei file plugin
Apriviewer.OpenDocument(...) (sincrono)await viewer.OpenDocumentAsync(...)
Chiudiviewer.CloseDocument() oppure viewer.Dispose()viewer.CloseDocument(token) — Viewer non è IDisposable
DurataViewer implementa IDisposable, mantiene il documento apertoViewer è senza stato; le sessioni vivono nella cache sotto i token
ConvertitoreProprietà viewer.ConverterIl plugin Converter (AddPlugin<ConverterPlugin>()) + il servizio DocumentConverter
Classi di configurazioneNamespace Doconut.Configs.View.*Tutte nel namespace Doconut
MiddlewareCollegamento manuale dei gestoriapp.UseDoconutResources() + app.UseDoconut()

Un tipico prima/dopo:

text
// .NET 6 (API vecchia, mostrata per contrasto — non valida su .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 iniettato, licenza configurata una volta in AddDoconut()
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { AllowSearch = true });

Migrazione da .NET Framework 4.7 (Web Forms)

Il Viewer 4.7 è un WebControl; .NET 8 sostituisce il modello di controllo con middleware + un servizio DI:

  • Il controllo <doconut:DocViewer runat=server> scompare — la pagina ospita la coppia di widget div e il tuo endpoint restituisce il token (Quick Start mostra il pattern).
  • Metodi di licenza statici → fonti di licenza DoconutOptions.
  • OpenDocument sincrono → await OpenDocumentAsync.
  • Viewer.ReferenceScripts() / ReferenceCss() esistono in entrambi i mondi — le versioni .NET 8 accettano oggetti ScriptConfig/CssConfig e sono soggette a licenza.
  • Proprietà del controllo (ShowThumbs, PageZoom, FixedZoom, …) → gli stessi nomi su ViewerConfig / le opzioni JS docViewer.
  • Metodi di esportazione che restituiscono byte[] → le API di esportazione asincrona di annotazioni su Viewer.

Pianifica questo come una riscrittura del livello di hosting attorno a un concetto invariato: apri → token → widget.

Nota sui nomi

In tutti i framework la classe è Viewer — se trovi DocumentViewer in snippet vecchi o articoli di terze parti, quel tipo non è mai esistito nell'SDK.

Checklist di migrazione

  1. Scambia i pacchetti; allinea le versioni dei pacchetti plugin.
  2. Sposta la configurazione della licenza in AddDoconut(); elimina le chiamate di licenza statiche.
  3. Rendi le chiamate di apertura asincrone; sostituisci Dispose/CloseDocument senza parametri con CloseDocument(token).
  4. Sostituisci gli utilizzi di viewer.Converter con la registrazione del plugin Converter + DocumentConverter.
  5. Ritestare il percorso di sicurezza: AddSession()/UseSession() sono ora obbligatori con la sicurezza predefinita (oltre a AddDistributedMemoryCache() in un'app minimal-API).

Questa pagina è stata utile?