Migrasi
Upgrade ke Doconut pada .NET 8
Dua migrasi tersedia pada halaman ini: memperbarui versi paket dalam .NET 8, dan memindahkan integrasi dari kerangka Doconut yang lebih lama (.NET 6, .NET Standard 2.0, .NET Framework 4.7) ke API .NET 8.
Memperbarui versi paket
- Perbarui paket (dan paket plugin apa pun — pertahankan versi tetap selaras):
bash
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 restart 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
.NET 8 API 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 bersifat stateless; sesi hidup di cache dengan 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:
text
// .NET 6 (API lama, ditampilkan untuk perbandingan — tidak valid pada .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 disuntikkan, 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 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 anotasi‑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 panggilan lisensi statis. - Ubah panggilan 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 (plusAddDistributedMemoryCache()dalam aplikasi minimal‑API).
Apakah halaman ini membantu?