การย้าย
อัปเกรดเป็น 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(หยุดทำงานเร็ว); มันจะไม่ย้อนกลับไปใช้ลายน้ำ, และIsVersionValidจะเป็นfalse. ต่ออายุ, แทนที่ไฟล์.lic, และรีสตาร์ทแอปพลิเคชันเพื่อให้AddDoconut()โหลดใบอนุญาตใหม่. - ทำการคอมไพล์ใหม่และให้ NuGet คืนค่าเวอร์ชันของ dependencies ที่ระบุ — อย่าตั้งค่า
System.Text.JsonหรือSystem.Drawing.Commonใหม่ (ดู Troubleshooting เพื่อดูข้อผิดพลาดที่เกิดจากการดาวน์เกรด). - ทำการทดสอบเบื้องต้น (smoke-test) เอกสารหนึ่งไฟล์ต่อแต่ละกลุ่มรูปแบบที่คุณใช้.
การย้ายจาก .NET 6 / .NET Standard 2.0
API ของ .NET 8 ถูกออกแบบใหม่โดยอิง DI และ async. การแมปคือ:
| ประเด็น | .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 implements IDisposable, เก็บเอกสารที่เปิดอยู่ | Viewer เป็นแบบไม่มีสถานะ; เซสชันอยู่ในแคชภายใต้โทเคน |
| ตัวแปลง | คุณสมบัติ viewer.Converter | ปลั๊กอิน Converter (AddPlugin<ConverterPlugin>()) + บริการ DocumentConverter |
| คลาสกำหนดค่า | เนมสเปซ Doconut.Configs.View.* | ทั้งหมดในเนมสเปซ Doconut |
| มิดเดิลแวร์ | การเชื่อมต่อ 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 แทนที่โมเดลคอนโทรลด้วยมิดเดิลแวร์ + บริการ DI:
- คอนโทรล
<doconut:DocViewer runat=server>หายไป — หน้าเว็บจะโฮสต์ส่วนของวิดเจ็ตdivคู่และ endpoint ของคุณจะคืนค่าโทเคน (Quick Start แสดงรูปแบบ). - เมธอดใบอนุญาตแบบคงที่ → แหล่งใบอนุญาตของ
DoconutOptions. OpenDocumentแบบซิงโครนัส →await OpenDocumentAsync.Viewer.ReferenceScripts()/ReferenceCss()มีอยู่ในทั้งสองเวอร์ชัน — เวอร์ชัน .NET 8 รับอ็อบเจ็กต์ScriptConfig/CssConfigและถูกจำกัดโดยใบอนุญาต.- คุณสมบัติคอนโทรล (
ShowThumbs,PageZoom,FixedZoom, …) → ใช้ชื่อเดียวกันบนViewerConfig/ ตัวเลือก JS ของdocViewer. - เมธอดส่งออกที่คืนค่า
byte[]→ API การส่งออกแบบ async บนViewer.
วางแผนส่วนนี้เป็นการเขียนใหม่ของเลเยอร์โฮสติ้งโดยคงแนวคิดเดิม: เปิด → โทเคน → วิดเจ็ต.
หมายเหตุการตั้งชื่อ
ในทุกเฟรมเวิร์กคลาสคือ Viewer — หากคุณพบ DocumentViewer ในโค้ดตัวอย่างเก่าหรือบทความของบุคคลที่สาม, ชนิดนั้นไม่เคยมีอยู่ใน SDK.
รายการตรวจสอบการย้าย
- สลับแพ็กเกจ; ทำให้เวอร์ชันแพ็กเกจปลั๊กอินสอดคล้องกัน.
- ย้ายการตั้งค่าใบอนุญาตเข้าไปใน
AddDoconut(); ลบการเรียกเมธอดใบอนุญาตแบบคงที่. - ทำการเรียกเปิดแบบ async; แทนที่
Dispose/CloseDocumentที่ไม่มีพารามิเตอร์ด้วยCloseDocument(token). - แทนที่การใช้
viewer.Converterด้วยการลงทะเบียนปลั๊กอิน Converter +DocumentConverter. - ทดสอบเส้นทางความปลอดภัยอีกครั้ง:
AddSession()/UseSession()ตอนนี้จำเป็นต้องใช้กับความปลอดภัยเริ่มต้น.
หน้านี้เป็นประโยชน์หรือไม่?