הגירה

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

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

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

נושא.NET 6 / Standard 2.0.NET 8
Setupבנה Viewer(cache, httpContextAccessor, licensePath)builder.Services.AddDoconut(options => …) + הזרקת Viewer
רישיוןViewer.DoconutLicense(path) סטטי + SetLicensePlugin(...) לכל תוסףoptions.LicensePath / LicenseContent / LicenseStream — רישיון אחד, גילוי אוטומטי של קבצי תוסף
פתיחהviewer.OpenDocument(...) (סינכרוני)await viewer.OpenDocumentAsync(...)
סגירהviewer.CloseDocument() או viewer.Dispose()viewer.CloseDocument(token) — Viewer אינו IDisposable
חיי‑החייםViewer מיישם IDisposable, מחזיק את המסמך הפתוחViewer חסר מצב; סשנים נשמרים במטמון תחת טוקנים
ממירמאפיין viewer.Converterתוסף הממיר (AddPlugin<ConverterPlugin>()) + שירות DocumentConverter
מחלקות תצורהמרחבי שם Doconut.Configs.View.*הכול במרחב שם 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> נעלם — העמוד מארח את זוג ה‑div של הווידג'ט וה‑endpoint שלך מחזיר את הטוקן (Quick Start מציג את התבנית).
  • שיטות רישיון סטטיות → מקורות רישיון ב‑DoconutOptions.
  • OpenDocument סינכרוני → await OpenDocumentAsync.
  • Viewer.ReferenceScripts() / ReferenceCss() קיימים בשתי העולמות — גרסאות .NET 8 מקבלות אובייקטים ScriptConfig/CssConfig והן כפופות לרישיון.
  • מאפייני הבקר (ShowThumbs, PageZoom, FixedZoom, …) → אותם שמות ב‑ViewerConfig / אפשרויות ה‑JS של docViewer.
  • שיטות יצוא המחזירות byte[] → API‑ים אסינכרוניים של ייצוא אנוטציות ב‑Viewer.

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

הערת שם

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

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

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

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