Migrasi
Upgrade ke Doconut pada .NET 8
Dua migrasi hadir di halaman ini: meningkatkan versi paket dalam .NET 8, dan memindahkan integrasi dari kerangka kerja Doconut yang lebih lama (.NET 6, .NET Standard 2.0, .NET Framework 4.7) ke API .NET 8.
Meningkatkan versi paket
- Perbarui paket (dan paket plugin apa pun — pertahankan versi yang selaras):
dotnet add package Doconut.NET8
dotnet add package Doconut.NET8.Dicom- Periksa jendela lisensi. Sebuah lisensi mencakup rentang versi. Jika versi baru berada di luar rentang tersebut, pembukaan diblokir —
OpenDocumentAsyncmelemparLicenseException(gagal cepat); tidak kembali ke watermark, danIsVersionValidmenjadifalse. Perbarui, ganti file.lic, dan mulai ulang aplikasi sehinggaAddDoconut()memuat lisensi baru. - Bangun kembali dan biarkan NuGet memulihkan versi dependensi yang dideklarasikan — jangan mengunci kembali
System.Text.JsonatauSystem.Drawing.Common(lihat Troubleshooting untuk kesalahan tepat yang disebabkan penurunan versi). - Lakukan smoke-test satu dokumen per keluarga format yang Anda gunakan.
Migrasi dari .NET 6 / .NET Standard 2.0
API .NET 8 merupakan desain ulang di sekitar DI dan async. Pemetaan:
| Concern | .NET 6 / Standard 2.0 | .NET 8 |
|---|---|---|
| Setup | Construct Viewer(cache, httpContextAccessor, licensePath) | builder.Services.AddDoconut(options => …) + inject Viewer |
| License | Static Viewer.DoconutLicense(path) + SetLicensePlugin(...) per plugin | options.LicensePath / LicenseContent / LicenseStream — satu lisensi, penemuan otomatis untuk file plugin |
| Open | viewer.OpenDocument(...) (sinkron) | await viewer.OpenDocumentAsync(...) |
| Close | viewer.CloseDocument() atau viewer.Dispose() | viewer.CloseDocument(token) — Viewer bukan IDisposable |
| Lifetime | Viewer mengimplementasikan IDisposable, menyimpan dokumen terbuka | Viewer tidak memiliki state; sesi hidup di cache berdasarkan token |
| Converter | properti viewer.Converter | Plugin Converter (AddPlugin<ConverterPlugin>()) + layanan DocumentConverter |
| Config classes | namespace Doconut.Configs.View.* | Semua berada di namespace Doconut |
| Middleware | Penangan manual | app.UseDoconutResources() + app.UseDoconut() |
Contoh sebelum/setelah yang tipikal:
// .NET 6 (API lama, ditampilkan untuk kontras — tidak valid di .NET 8)
using var viewer = new Viewer(cache, httpContextAccessor, "wwwroot/Doconut.Viewer.lic");
var token = viewer.OpenDocument(path, new PdfConfig { AllowSearch = true }, new DocOptions());// .NET 8 — Viewer di‑inject, lisensi dikonfigurasi sekali di AddDoconut()
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { AllowSearch = true });Migrasi dari .NET Framework 4.7 (Web Forms)
Viewer 4.7 adalah sebuah WebControl; .NET 8 menggantikan model kontrol dengan middleware + layanan DI:
- Kontrol
<doconut:DocViewer runat=server>menghilang — halaman menampung pasangan widgetdivdan endpoint Anda mengembalikan token (Quick Start menunjukkan pola tersebut). - Metode lisensi statis → sumber lisensi
DoconutOptions. OpenDocumentsinkron →await OpenDocumentAsync.Viewer.ReferenceScripts()/ReferenceCss()ada di kedua dunia — versi .NET 8 menerima objekScriptConfig/CssConfigdan dibatasi lisensi.- Properti kontrol (
ShowThumbs,PageZoom,FixedZoom, …) → nama yang sama padaViewerConfig/ opsi JSdocViewer. - Metode ekspor yang mengembalikan
byte[]→ API ekspor‑annotasi async padaViewer.
Rencanakan ini sebagai penulisan ulang lapisan hosting di sekitar konsep yang tidak berubah: buka → token → widget.
Catatan penamaan
Di semua kerangka kerja kelasnya adalah Viewer — jika Anda menemukan DocumentViewer dalam cuplikan lama atau artikel pihak ketiga, tipe itu tidak pernah ada dalam SDK.
Daftar periksa migrasi
- Ganti paket; selaraskan versi paket plugin.
- Pindahkan pengaturan lisensi ke dalam
AddDoconut(); hapus pemanggilan lisensi statis. - Ubah pemanggilan buka menjadi async; ganti
Dispose/CloseDocumenttanpa parameter denganCloseDocument(token). - Ganti penggunaan
viewer.Converterdengan pendaftaran plugin Converter +DocumentConverter. - Uji kembali jalur keamanan:
AddSession()/UseSession()kini diperlukan dengan keamanan default.
Apakah halaman ini membantu?