การย้ายข้อมูล

อัปเกรดเป็น 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 คืนค่าเวอร์ชันของ dependencies ที่ระบุ — อย่า pin System.Text.Json หรือ System.Drawing.Common ใหม่ (ดู Troubleshooting เพื่อดูข้อผิดพลาดที่เกิดจากการดาวน์เกรด).
  3. ทำการ Smoke-test เอกสารหนึ่งไฟล์ต่อแต่ละประเภทฟอร์แมตที่คุณใช้.

การย้ายจาก .NET 6 / .NET Standard 2.0

API ของ .NET 8 ถูกออกแบบใหม่โดยอิง DI และ async. การแมปคือ:

ประเด็น.NET 6 / Standard 2.0.NET 8
Setupสร้าง Viewer(cache, httpContextAccessor, licensePath)builder.Services.AddDoconut(options => …) + inject Viewer
Licenseแบบคงที่ Viewer.DoconutLicense(path) + SetLicensePlugin(...) ต่อปลั๊กอินoptions.LicensePath / LicenseContent / LicenseStream — ใบอนุญาตเดียว, ค้นหาอัตโนมัติสำหรับไฟล์ปลั๊กอิน
Openviewer.OpenDocument(...) (แบบ synchronous)await viewer.OpenDocumentAsync(...)
Closeviewer.CloseDocument() หรือ viewer.Dispose()viewer.CloseDocument(token) — Viewer ไม่ใช่ IDisposable
LifetimeViewer implements IDisposable, เก็บเอกสารที่เปิดอยู่Viewer เป็นแบบไม่มีสถานะ; เซสชันอยู่ในแคชภายใต้ token
Converterproperty viewer.Converterปลั๊กอิน Converter (AddPlugin<ConverterPlugin>()) + เซอร์วิส DocumentConverter
Config classesnamespaces Doconut.Configs.View.*ทั้งหมดอยู่ใน namespace Doconut
Middlewareการเชื่อมต่อ handler ด้วยตนเอง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 แทนที่โมเดลคอนโทรลด้วย middleware + เซอร์วิส DI:

  • คอนโทรล <doconut:DocViewer runat=server> หายไป — หน้าเว็บจะโฮสต์ widget div คู่และ endpoint ของคุณจะคืนค่า token (Quick Start แสดงรูปแบบ).
  • วิธีการใบอนุญาตแบบคงที่ → แหล่งใบอนุญาตใน DoconutOptions.
  • OpenDocument แบบ synchronous → await OpenDocumentAsync.
  • Viewer.ReferenceScripts() / ReferenceCss() มีอยู่ในทั้งสองโลก — เวอร์ชัน .NET 8 รับอ็อบเจกต์ ScriptConfig/CssConfig และถูกจำกัดด้วยใบอนุญาต.
  • คุณสมบัติคอนโทรล (ShowThumbs, PageZoom, FixedZoom, …) → ใช้ชื่อเดียวกันบน ViewerConfig / ตัวเลือก JS docViewer.
  • วิธีการส่งออกที่คืนค่า byte[] → API การส่งออกแบบ async บน Viewer.
  • วางแผนการย้ายนี้เป็นการเขียนใหม่ของชั้นโฮสติ้งโดยคงแนวคิดเดิม: open → token → widget.

หมายเหตุเรื่องการตั้งชื่อ

ในทุกเฟรมเวิร์กคลาสคือ Viewer — หากคุณพบ DocumentViewer ในโค้ดตัวอย่างเก่าหรือบทความของบุคคลที่สาม, ชนิดนั้นไม่เคยมีอยู่ใน SDK.

รายการตรวจสอบการย้ายข้อมูล

  1. สลับแพ็กเกจ; ทำให้เวอร์ชันของแพ็กเกจปลั๊กอินสอดคล้องกัน.
  2. ย้ายการตั้งค่าใบอนุญาตเข้าไปใน AddDoconut(); ลบการเรียกใช้ใบอนุญาตแบบคงที่.
  3. ทำการเรียกเปิดเป็นแบบ async; แทนที่ Dispose/CloseDocument ที่ไม่มีพารามิเตอร์ด้วย CloseDocument(token).
  4. แทนที่การใช้ viewer.Converter ด้วยการลงทะเบียนปลั๊กอิน Converter + DocumentConverter.
  5. ทดสอบเส้นทางความปลอดภัยใหม่: AddSession()/UseSession() ตอนนี้จำเป็นต้องใช้กับความปลอดภัยเริ่มต้น.

หน้านี้เป็นประโยชน์หรือไม่?