การย้ายข้อมูล
อัปเกรดเป็น 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(fail-fast) ; มันจะไม่ย้อนกลับไปใช้ watermark, และIsVersionValidจะเป็นfalse. ต่ออายุ, แทนที่ไฟล์.lic, และรีสตาร์ทแอปพลิเคชันเพื่อให้AddDoconut()โหลดใบอนุญาตใหม่. - สร้างใหม่และให้ NuGet คืนค่าเวอร์ชันของ dependency ที่ระบุ — อย่า pin
System.Text.JsonหรือSystem.Drawing.Commonใหม่ (ดู Troubleshooting สำหรับข้อผิดพลาดที่เกิดจากการ downgrade). - ทำการ 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 plugin | options.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/ ตัวเลือก JSdocViewer. - วิธีการ Export ที่คืนค่า
byte[]→ API async สำหรับการส่งออก annotation บนViewer.
วางแผนส่วนนี้เป็นการเขียนใหม่ของชั้นโฮสติ้งโดยคงแนวคิดเดิม: เปิด → token → widget.
หมายเหตุการตั้งชื่อ
ในทุกเฟรมเวิร์กคลาสคือ Viewer — หากคุณพบ DocumentViewer ในโค้ดตัวอย่างเก่าหรือบทความของบุคคลที่สาม, ชนิดนั้นไม่มีอยู่ใน SDK.
รายการตรวจสอบการย้ายข้อมูล
- สลับแพ็กเกจ; ทำให้เวอร์ชันของปลั๊กอินสอดคล้องกัน.
- ย้ายการตั้งค่าใบอนุญาตเข้าไปใน
AddDoconut(); ลบการเรียกใช้ใบอนุญาตแบบ static. - ทำให้การเปิดเป็นแบบ async; แทน
Dispose/CloseDocumentแบบไม่มีพารามิเตอร์ด้วยCloseDocument(token). - แทนที่การใช้
viewer.Converterด้วยการลงทะเบียนปลั๊กอิน Converter +DocumentConverter. - ทดสอบเส้นทางความปลอดภัยใหม่:
AddSession()/UseSession()ตอนนี้จำเป็นพร้อมกับความปลอดภัยเริ่มต้น (เพิ่มAddDistributedMemoryCache()ในแอป Minimal‑API).
หน้านี้เป็นประโยชน์หรือไม่?