הגירה
שדרוג ל‑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 |
|---|---|---|
| הגדרה | בנה 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.
רשימת בדיקה של ההגירה
- החלף חבילות; יישור גרסאות חבילות תוסף.
- העבר את הגדרת הרישיון ל‑
AddDoconut(); מחק קריאות רישיון סטטיות. - הפוך קריאות פתיחה לאסינכרוניות; החלף
Dispose/CloseDocumentללא פרמטר ב‑CloseDocument(token). - החלף שימושים ב‑
viewer.Converterברישום תוסף הממיר +DocumentConverter. - בצע בדיקה מחדש של נתיב האבטחה:
AddSession()/UseSession()נדרשים כעת עם האבטחה ברירת המחדל.
האם דף זה היה מועיל?