Μετάβαση

Αναβάθμιση σε Doconut στο .NET 8

Δύο μεταβάσεις εμφανίζονται σε αυτή τη σελίδα: αναβάθμιση της έκδοσης του πακέτου στο .NET 8, και μεταφορά μιας ενσωμάτωσης από ένα παλαιότερο πλαίσιο Doconut (.NET 6, .NET Standard 2.0, .NET Framework 4.7) στο API του .NET 8.

Αναβάθμιση της έκδοσης του πακέτου

  1. Ενημερώστε το πακέτο (και τυχόν πακέτα plugin — διατηρήστε τις εκδόσεις ευθυγραμμισμένες):
bash
dotnet add package Doconut.NET8
dotnet add package Doconut.NET8.Dicom
  1. Ελέγξτε το παράθυρο άδειας. Μια άδεια καλύπτει ένα εύρος εκδόσεων. Εάν η νέα έκδοση βρίσκεται εκτός αυτού, το άνοιγμα αποκλείεται — OpenDocumentAsync ρίχνει LicenseException (αποτυχία άμεσα); δεν επιστρέφει σε υδατογράφημα, και το IsVersionValid γίνεται false. Ανανέωση, αντικατάσταση του .lic, και επανεκκίνηση της εφαρμογής ώστε το AddDoconut() φορτώνει τη νέα άδεια.
  2. Ανακατασκευάστε και αφήστε το NuGet να επαναφέρει τις δηλωμένες εκδόσεις εξαρτήσεων — μην ξανακλειδώσετε το System.Text.Json ή το System.Drawing.Common (δείτε την Επίλυση προβλημάτων για τα ακριβή σφάλματα που προκαλεί μια υποβάθμιση).
  3. Εκτελέστε δοκιμή καπνού (smoke-test) ενός εγγράφου ανά οικογένεια μορφής που χρησιμοποιείτε.

Μεταφορά από .NET 6 / .NET Standard 2.0

Το API του .NET 8 είναι μια επανασχεδίαση γύρω από DI και ασύγχρονη λειτουργία. Η αντιστοίχηση:

Αντικείμενο.NET 6 / Standard 2.0.NET 8
ΡύθμισηΔημιουργία Viewer(cache, httpContextAccessor, licensePath)builder.Services.AddDoconut(options => …) + ενσωμάτωση Viewer
ΆδειαΣτατική Viewer.DoconutLicense(path) + SetLicensePlugin(...) ανά pluginoptions.LicensePath / LicenseContent / LicenseStream — μία άδεια, αυτόματη ανίχνευση αρχείων plugin
Άνοιγμαviewer.OpenDocument(...) (συγχρονικό)await viewer.OpenDocumentAsync(...)
Κλείσιμοviewer.CloseDocument() ή viewer.Dispose()viewer.CloseDocument(token) — το Viewer δεν είναι IDisposable
Διάρκεια ζωήςViewer υλοποιεί IDisposable, κρατά το ανοιχτό έγγραφοViewer είναι χωρίς κατάσταση (stateless); οι συνεδρίες ζουν στην κρυφή μνήμη (cache) υπό tokens
Μετατροπέαςιδιότητα viewer.ConverterΤο plugin Converter (AddPlugin<ConverterPlugin>()) + η υπηρεσία DocumentConverter
Κλάσεις διαμόρφωσηςονομαστικούς χώρους Doconut.Configs.View.*Όλα στο namespace Doconut
Μεσαίος λογισμικόςΧειροκίνητη σύνδεση χειριστών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 αντικαθιστά το μοντέλο ελέγχου με μεσαίο λογισμικό + μια υπηρεσία DI:

  • Ο έλεγχος <doconut:DocViewer runat=server> εξαφανίζεται — η σελίδα φιλοξενεί το ζεύγος widget div και το endpoint σας επιστρέφει το token (το Quick Start δείχνει το μοτίβο).
  • Στατικές μέθοδοι άδειας → πηγές άδειας DoconutOptions.
  • Συγχρονικό OpenDocument → await OpenDocumentAsync.
  • Viewer.ReferenceScripts() / ReferenceCss() υπάρχουν και στα δύο περιβάλλοντα — οι εκδόσεις του .NET 8 δέχονται αντικείμενα ScriptConfig/CssConfig και ελέγχονται από άδεια.
  • Ιδιότητες ελέγχου (ShowThumbs, PageZoom, FixedZoom, …) → τα ίδια ονόματα στο ViewerConfig / τις επιλογές JS docViewer.
  • Μέθοδοι εξαγωγής που επιστρέφουν byte[] → τα ασύγχρονα APIs εξαγωγής σχολίων στο Viewer.

Σχεδιάστε αυτή τη μεταφορά ως επανασχεδίαση του επιπέδου φιλοξενίας γύρω από μια αμετάβλητη έννοια: άνοιγμα → token → widget.

Σημείωση ονομασίας

Σε όλα τα πλαίσια η κλάση είναι Viewer — εάν βρείτε DocumentViewer σε παλιά αποσπάσματα ή άρθρα τρίτων, αυτός ο τύπος δεν υπήρχε ποτέ στο SDK.

Λίστα ελέγχου μετάβασης

  1. Αντικαταστήστε τα πακέτα· ευθυγραμμίστε τις εκδόσεις των πακέτων plugin.
  2. Μεταφέρετε τη ρύθμιση της άδειας στο AddDoconut()· διαγράψτε τις στατικές κλήσεις άδειας.
  3. Κάντε τις κλήσεις ανοίγματος ασύγχρονες· αντικαταστήστε το Dispose/το CloseDocument χωρίς παράμετρο με CloseDocument(token).
  4. Αντικαταστήστε τις χρήσεις του viewer.Converter με την καταχώρηση του plugin Converter + DocumentConverter.
  5. Επαναλάβετε τη δοκιμή του ασφαλιστικού μονοπατιού: τα AddSession()/UseSession() είναι τώρα απαιτούμενα με την προεπιλεγμένη ασφάλεια (συμπεριλαμβανομένου του AddDistributedMemoryCache() σε εφαρμογή minimal-API).

Ήταν αυτή η σελίδα χρήσιμη;