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

อัปเกรดเป็น 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 (fail-fast) ; มันจะไม่ย้อนกลับไปใช้ watermark, และ IsVersionValid จะเป็น false. ต่ออายุ, แทนที่ไฟล์ .lic, และรีสตาร์ทแอปพลิเคชันเพื่อให้ AddDoconut() โหลดใบอนุญาตใหม่.
  2. สร้างใหม่และให้ NuGet คืนค่าเวอร์ชันของ dependency ที่ระบุ — อย่า pin System.Text.Json หรือ System.Drawing.Common ใหม่ (ดู Troubleshooting สำหรับข้อผิดพลาดที่เกิดจากการ downgrade).
  3. ทำการ Smoke‑test หนึ่งเอกสารต่อรูปแบบไฟล์ที่คุณใช้.

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

.NET 8 API ถูกออกแบบใหม่โดยอิง 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 pluginoptions.LicensePath / LicenseContent / LicenseStream — one license, auto-discovery for plugin files
เปิดviewer.OpenDocument(...) (synchronous)await viewer.OpenDocumentAsync(...)
ปิดviewer.CloseDocument() หรือ viewer.Dispose()viewer.CloseDocument(token) — Viewer ไม่ใช่ IDisposable
อายุการใช้งานViewer ทำหน้าที่เป็น IDisposable และเก็บเอกสารที่เปิดอยู่Viewer ไม่มีสถานะ; เซสชันจะอยู่ในแคชภายใต้ token
ตัวแปลงviewer.Converter propertyปลั๊กอิน Converter (AddPlugin<ConverterPlugin>()) + เซอร์วิส DocumentConverter
คลาสการกำหนดค่าDoconut.Configs.View.* namespacesทั้งหมดอยู่ใน namespace Doconut
มิดเดิลแวร์การเชื่อมต่อ handler ด้วยตนเองapp.UseDoconutResources() + app.UseDoconut()

ตัวอย่างก่อน/หลัง:

text
// .NET 6 (API เก่า, แสดงเพื่อเปรียบเทียบ — ไม่ใช้ได้บน .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 (Web Forms)

Viewer เวอร์ชัน 4.7 เป็น WebControl; .NET 8 แทนที่โมเดลคอนโทรลด้วยมิดเดิลแวร์ + DI service:

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

วางแผนส่วนนี้เป็นการเขียนใหม่ของชั้นโฮสติ้งโดยคงแนวคิดเดิม: เปิด → token → widget.

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

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

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

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

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