הגירה

שדרוג ל‑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
הגדרהבנה Viewer(cache, httpContextAccessor, licensePath)builder.Services.AddDoconut(options => …) + הזרקת Viewer
רישיוןסטטי Viewer.DoconutLicense(path) + SetLicensePlugin(...) לכל תוסףoptions.LicensePath / LicenseContent / LicenseStream — רישיון אחד, גילוי אוטומטי של קבצי תוסף
פתיחהviewer.OpenDocument(...) (סינכרוני)await viewer.OpenDocumentAsync(...)
סגירהviewer.CloseDocument() or viewer.Dispose()viewer.CloseDocument(token)Viewer אינו IDisposable
חיי‑החייםViewer מיישם IDisposable, מחזיק את המסמך הפתוחViewer חסר מצב; סשנים מתרחשים במטמון תחת טוקנים
ממירviewer.Converter propertyתוסף הממיר (AddPlugin<ConverterPlugin>()) + שירות DocumentConverter
מחלקות תצורהDoconut.Configs.View.* namespacesהכול במרחב השמות Doconut
אמצעי בינייםחיבורים ידניים של מטפלapp.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 שלך מחזיר את הטוקן (ההתחלה המהירה מציגה את הדפוס).
  • שיטות רישיון סטטיות → מקורות רישיון 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 ברישום תוסף הממיר + DocumentConverter.
  5. בצע בדיקה מחדש של נתיב האבטחה: AddSession()/UseSession() נדרשים כעת עם האבטחה ברירת המחדל.

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