الترحيل

الترقية إلى Doconut على .NET 8

هناك نوعان من الترحيل في هذه الصفحة: ترقية نسخة الحزمة داخل .NET 8، ونقل تكامل من إطار Doconut أقدم (.NET 6، .NET Standard 2.0، .NET Framework 4.7) إلى واجهة برمجة تطبيقات .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

واجهة برمجة تطبيقات .NET 8 هي إعادة تصميم حول حقن الاعتمادات (DI) والبرمجة غير المتزامنة. الخريطة:

الاهتمام.NET 6 / Standard 2.0.NET 8
Setupإنشاء Viewer(cache, httpContextAccessor, licensePath)builder.Services.AddDoconut(options => …) + حقن Viewer
LicenseViewer.DoconutLicense(path) ثابت + SetLicensePlugin(...) لكل ملحقoptions.LicensePath / LicenseContent / LicenseStream — ترخيص واحد، اكتشاف تلقائي لملفات الملحقات
Openviewer.OpenDocument(...) (متزامن)await viewer.OpenDocumentAsync(...)
Closeviewer.CloseDocument() أو viewer.Dispose()viewer.CloseDocument(token)Viewer ليس IDisposable
LifetimeViewer ينفذ IDisposable، يحتفظ بالمستند المفتوحViewer عديم حالة؛ الجلسات تعيش في الذاكرة المؤقتة تحت الرموز
Converterخاصية viewer.Converterملحق Converter (AddPlugin<ConverterPlugin>()) + خدمة DocumentConverter
Config classesمساحات الأسماء Doconut.Configs.View.*الكل في مساحة الاسم Doconut
Middlewareربط المعالج يدويًا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 للودجت وتعيد نقطة النهاية الخاصة بك الرمز (يظهر النمط في دليل البدء السريع).
  • طرق الترخيص الثابتة → مصادر ترخيص DoconutOptions.
  • OpenDocument المتزامن → await OpenDocumentAsync.
  • Viewer.ReferenceScripts() / ReferenceCss() موجودة في كلا العالمين — إصدارات .NET 8 تأخذ كائنات ScriptConfig/CssConfig وتخضع للترخيص.
  • خصائص التحكم (ShowThumbs، PageZoom، FixedZoom، …) → نفس الأسماء في ViewerConfig / خيارات JavaScript docViewer.
  • طرق التصدير التي تُعيد byte[] → واجهات برمجة تطبيقات التصدير غير المتزامنة على Viewer.

خطط لهذا كإعادة كتابة طبقة الاستضافة حول مفهوم غير متغير: فتح → رمز → ودجت.

ملاحظة حول التسمية

في جميع الأطر، الصنف هو Viewer — إذا وجدت DocumentViewer في مقتطفات قديمة أو مقالات طرف ثالث، فهذا النوع لم يكن موجودًا أبدًا في مجموعة تطوير البرمجيات (SDK).

قائمة التحقق للترحيل

  1. بدّل الحزم؛ حافظ على توافق إصدارات حزم الملحقات.
  2. انقل إعداد الترخيص إلى AddDoconut()؛ احذف استدعاءات الترخيص الثابتة.
  3. اجعل استدعاءات الفتح غير متزامنة؛ استبدل Dispose/CloseDocument بدون معلمات بـ CloseDocument(token).
  4. استبدل استخدامات viewer.Converter بتسجيل ملحق Converter + DocumentConverter.
  5. أعد اختبار مسار الأمان: AddSession()/UseSession() الآن مطلوبان مع الأمان الافتراضي.

هل كانت هذه الصفحة مفيدة؟