הגירה
שדרוג ל‑Doconut ב‑.NET 8
שתי הגירות מוצגות בדף זה: שדרוג גרסת החבילה ב‑.NET 8, והעברת אינטגרציה ממסגרת Doconut ישנה (.NET 6, .NET Standard 2.0, .NET Framework 4.7) ל‑API של .NET 8.
שדרוג גרסת החבילה
- עדכן את החבילה (וכן כל חבילות הפלאגין — שמור על יישור הגרסאות):
bash
dotnet add package Doconut.NET8
dotnet add package Doconut.NET8.Dicom- בדוק את חלון הרישיון. רישיון מכסה טווח גרסאות. אם הגרסה החדשה נמצאת מחוץ לטווח, הפתיחה חסומה —
OpenDocumentAsyncזורקLicenseException(כשל מהיר); הוא אינו חוזר למים, ו‑IsVersionValidהופך ל‑false. חידש, החלף את קובץ ה‑.lic, והפעל מחדש את האפליקציה כך ש‑AddDoconut()יטען את הרישיון החדש. - בנה מחדש ותן ל‑NuGet לשחזר את גרסאות התלויות שהוגדרו — אל תצמד מחדש את
System.Text.JsonאוSystem.Drawing.Common(ראה את חלק האיתור לתקלות לקבלת השגיאות המדויקות שנגרמות משידור גרסה לאחור). - בצע בדיקת עישון על מסמך אחד לכל משפחת פורמט שבה אתה משתמש.
הגירה מ‑.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 plugin | options.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 document | Viewer is stateless; sessions live in the cache under tokens |
| ממיר | viewer.Converter property | The Converter plugin (AddPlugin<ConverterPlugin>()) + the DocumentConverter service |
| מחלקות תצורה | Doconut.Configs.View.* namespaces | All in the Doconut namespace |
| אמצעי ביניים | Manual handler wiring | 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 שלך מחזיר את הטוקן (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.
רשימת בדיקת הגירה
- החלף חבילות; יישור גרסאות חבילות הפלאגין.
- העבר את הגדרת הרישיון ל‑
AddDoconut(); מחק קריאות רישיון סטטיות. - הפוך קריאות פתיחה לאסינכרוניות; החלף
Dispose/CloseDocumentללא פרמטר ב‑CloseDocument(token). - החלף שימושים ב‑
viewer.Converterברישום הפלאגין Converter +DocumentConverter. - בצע בדיקה מחדש של נתיב האבטחה:
AddSession()/UseSession()נדרשים כעת עם האבטחה ברירת המחדל.
האם דף זה היה מועיל?