Migrasi
Upgrade ke Doconut pada .NET 8
Dua migrasi hadir di halaman ini: memperbarui 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.
Memperbarui versi paket
- Perbarui paket (dan semua paket plugin — pertahankan versi yang 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 ulang
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 seputar DI dan async. Pemetaan:
| Aspek | .NET 6 / Standard 2.0 | .NET 8 |
|---|---|---|
| Pengaturan | Construct Viewer(cache, httpContextAccessor, licensePath) | builder.Services.AddDoconut(options => …) + inject Viewer |
| Lisensi | Static Viewer.DoconutLicense(path) + SetLicensePlugin(...) per plugin | options.LicensePath / LicenseContent / LicenseStream — satu lisensi, penemuan otomatis untuk berkas plugin |
| Buka | viewer.OpenDocument(...) (sinkron) | await viewer.OpenDocumentAsync(...) |
| Tutup | viewer.CloseDocument() atau viewer.Dispose() | viewer.CloseDocument(token) — Viewer bukan IDisposable |
| Masa Hidup | Viewer mengimplementasikan IDisposable, menahan dokumen terbuka | Viewer bersifat stateless; sesi hidup di cache berdasarkan token |
| Konverter | properti viewer.Converter | Plugin Converter (AddPlugin<ConverterPlugin>()) + layanan DocumentConverter |
| Kelas konfigurasi | namespace Doconut.Configs.View.* | Semua berada di namespace Doconut |
| Middleware | Penangan manual | app.UseDoconutResources() + app.UseDoconut() |
Contoh sebelum/setelah:
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 });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 di SDK.
Daftar Periksa Migrasi
- Tukar 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.
Apakah halaman ini membantu?