الترحيل

الترقية إلى 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
الإعدادإنشاء 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 (واجهة برمجة تطبيقات قديمة، موضحة للمقارنة — غير صالحة على .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 (نماذج الويب)

الـ Viewer في الإصدار 4.7 هو WebControl؛ .NET 8 يستبدل نموذج التحكم بالوسطية + خدمة DI:

  • يتلاشى عنصر التحكم <doconut:DocViewer runat=server> — تستضيف الصفحة زوج الودجت div وتعيد نقطة النهاية الخاصة بك الرمز (يظهر Quick Start النمط).
  • طرق الترخيص الثابتة → مصادر الترخيص DoconutOptions.
  • OpenDocument المتزامن → await OpenDocumentAsync.
  • Viewer.ReferenceScripts() / ReferenceCss() موجودان في كلا العالمين — إصدارات .NET 8 تأخذ كائنات ScriptConfig/CssConfig وتكون مقيدة بالترخيص.
  • خصائص التحكم (ShowThumbs، PageZoom، FixedZoom، …) → نفس الأسماء على ViewerConfig / خيارات JS للـ docViewer.
  • طرق التصدير التي تُعيد byte[] → واجهات برمجة التطبيقات غير المتزامنة لتصدير التعليقات التوضيحية على Viewer.

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

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

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

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

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

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