การย้ายข้อมูล
อัปเกรดเป็น 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 ที่ระบุ — อย่า pin
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 |
|---|---|---|
| Setup | สร้าง Viewer(cache, httpContextAccessor, licensePath) | builder.Services.AddDoconut(options => …) + inject Viewer |
| License | แบบคงที่ Viewer.DoconutLicense(path) + SetLicensePlugin(...) ต่อปลั๊กอิน | options.LicensePath / LicenseContent / LicenseStream — ใบอนุญาตเดียว, ค้นหาอัตโนมัติสำหรับไฟล์ปลั๊กอิน |
| Open | viewer.OpenDocument(...) (แบบ synchronous) | await viewer.OpenDocumentAsync(...) |
| Close | viewer.CloseDocument() หรือ viewer.Dispose() | viewer.CloseDocument(token) — Viewer ไม่ใช่ IDisposable |
| Lifetime | Viewer implements IDisposable, เก็บเอกสารที่เปิดอยู่ | Viewer เป็นแบบไม่มีสถานะ; เซสชันอยู่ในแคชภายใต้ token |
| Converter | property viewer.Converter | ปลั๊กอิน Converter (AddPlugin<ConverterPlugin>()) + เซอร์วิส DocumentConverter |
| Config classes | namespaces 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>หายไป — หน้าเว็บจะโฮสต์ widgetdivคู่และ endpoint ของคุณจะคืนค่า token (Quick Start แสดงรูปแบบ). - วิธีการใบอนุญาตแบบคงที่ → แหล่งใบอนุญาตใน
DoconutOptions. OpenDocumentแบบ synchronous →await OpenDocumentAsync.Viewer.ReferenceScripts()/ReferenceCss()มีอยู่ในทั้งสองโลก — เวอร์ชัน .NET 8 รับอ็อบเจกต์ScriptConfig/CssConfigและถูกจำกัดด้วยใบอนุญาต.- คุณสมบัติคอนโทรล (
ShowThumbs,PageZoom,FixedZoom, …) → ใช้ชื่อเดียวกันบนViewerConfig/ ตัวเลือก JSdocViewer. - วิธีการส่งออกที่คืนค่า
byte[]→ API การส่งออกแบบ async บนViewer. - วางแผนการย้ายนี้เป็นการเขียนใหม่ของชั้นโฮสติ้งโดยคงแนวคิดเดิม: open → token → widget.
หมายเหตุเรื่องการตั้งชื่อ
ในทุกเฟรมเวิร์กคลาสคือ Viewer — หากคุณพบ DocumentViewer ในโค้ดตัวอย่างเก่าหรือบทความของบุคคลที่สาม, ชนิดนั้นไม่เคยมีอยู่ใน SDK.
รายการตรวจสอบการย้ายข้อมูล
- สลับแพ็กเกจ; ทำให้เวอร์ชันของแพ็กเกจปลั๊กอินสอดคล้องกัน.
- ย้ายการตั้งค่าใบอนุญาตเข้าไปใน
AddDoconut(); ลบการเรียกใช้ใบอนุญาตแบบคงที่. - ทำการเรียกเปิดเป็นแบบ async; แทนที่
Dispose/CloseDocumentที่ไม่มีพารามิเตอร์ด้วยCloseDocument(token). - แทนที่การใช้
viewer.Converterด้วยการลงทะเบียนปลั๊กอิน Converter +DocumentConverter. - ทดสอบเส้นทางความปลอดภัยใหม่:
AddSession()/UseSession()ตอนนี้จำเป็นต้องใช้กับความปลอดภัยเริ่มต้น.
หน้านี้เป็นประโยชน์หรือไม่?