הגירה

שדרוג ל‑Doconut ב‑.NET 8

שתי הגירות מוצגות בדף זה: שדרוג גרסת החבילה ב‑.NET 8, והעברת אינטגרציה ממסגרת Doconut ישנה (.NET 6, .NET Standard 2.0, .NET Framework 4.7) ל‑API של .NET 8.

שדרוג גרסת החבילה

  1. עדכן את החבילה (וכן כל חבילות הפלאגין — שמור על יישור הגרסאות):
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. בצע בדיקת עישון על מסמך אחד לכל משפחת פורמט שבה אתה משתמש.

הגירה מ‑.NET 6 / .NET Standard 2.0

ה‑API של .NET 8 הוא עיצוב מחדש סביב DI ו‑async. המיפוי:

נושא.NET 6 / Standard 2.0.NET 8
הקמהConstruct Viewer(cache, httpContextAccessor, licensePath)builder.Services.AddDoconut(options => …) + inject Viewer
רישיוןStatic Viewer.DoconutLicense(path) + SetLicensePlugin(...) per pluginoptions.LicensePath / LicenseContent / LicenseStream — one license, auto-discovery for plugin files
פתיחהviewer.OpenDocument(...) (synchronous)await viewer.OpenDocumentAsync(...)
סגירהviewer.CloseDocument() or viewer.Dispose()viewer.CloseDocument(token) — Viewer is not IDisposable
אורך חייםViewer implements IDisposable, holds the open documentViewer is stateless; sessions live in the cache under tokens
ממירviewer.Converter propertyThe Converter plugin (AddPlugin<ConverterPlugin>()) + the DocumentConverter service
מחלקות תצורהDoconut.Configs.View.* namespacesAll in the Doconut namespace
אמצעי בינייםManual handler wiringapp.UseDoconutResources() + app.UseDoconut()

דוגמה טיפוסית לפני/אחרי:

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 });

הגירה מ‑.NET Framework 4.7 (Web Forms)

ה‑Viewer של 4.7 הוא WebControl; .NET 8 מחליף את מודל הבקר עם אמצעי ביניים + שירות DI:

  • בקר <doconut:DocViewer runat=server> נעלם — העמוד מארח את זוג ה‑div של הווידג'ט וה‑endpoint שלך מחזיר את הטוקן (Quick Start מציג את הדפוס).
  • שיטות רישיון סטטיות → מקורות רישיון ב‑DoconutOptions.
  • OpenDocument סינכרוני → await OpenDocumentAsync.
  • Viewer.ReferenceScripts() / ReferenceCss() קיימים בשני העולמות — גרסאות .NET 8 מקבלות אובייקטים של ScriptConfig/CssConfig והן כפופות לרישיון.
  • מאפייני בקרה (ShowThumbs, PageZoom, FixedZoom, …) → אותם שמות ב‑ViewerConfig / אפשרויות ה‑JS של docViewer.
  • שיטות יצוא המחזירות byte[] → ה‑APIs האסינכרוניים של ייצוא אנוטציות ב‑Viewer.

תכנן זאת כתיקון של שכבת האחסון סביב מושג שלא השתנה: פתיחה → טוקן → ווידג'ט.

הערת שם

בכל המסגרות המחלקה היא Viewer — אם אתה מוצא DocumentViewer בקטעי קוד ישנים או במאמרים של צד שלישי, סוג זה מעולם לא היה קיים ב‑SDK.

רשימת בדיקת הגירה

  1. החלף חבילות; יישור גרסאות חבילות הפלאגין.
  2. העבר את הגדרת הרישיון ל‑AddDoconut(); מחק קריאות רישיון סטטיות.
  3. הפוך קריאות פתיחה לאסינכרוניות; החלף Dispose/CloseDocument ללא פרמטר ב‑CloseDocument(token).
  4. החלף שימושים ב‑viewer.Converter ברישום הפלאגין Converter + DocumentConverter.
  5. בצע בדיקה מחדש של נתיב האבטחה: AddSession()/UseSession() נדרשים כעת עם האבטחה ברירת המחדל.

האם דף זה היה מועיל?