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

  1. Perbarui paket (dan paket plugin apa pun — pertahankan versi tetap selaras):
bash
dotnet add package Doconut.NET8
dotnet add package Doconut.NET8.Dicom
  1. Periksa jendela lisensi. Sebuah lisensi mencakup rentang versi. Jika versi baru berada di luar rentang tersebut, pembukaan diblokir — OpenDocumentAsync melempar LicenseException (gagal cepat); tidak kembali ke watermark, dan IsVersionValid menjadi false. Perbarui, ganti file .lic, dan restart aplikasi sehingga AddDoconut() memuat lisensi baru.
  2. Bangun kembali dan biarkan NuGet memulihkan versi dependensi yang dideklarasikan — jangan mengunci kembali System.Text.Json atau System.Drawing.Common (lihat Troubleshooting untuk kesalahan tepat yang disebabkan penurunan versi).
  3. 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
SetupConstruct Viewer(cache, httpContextAccessor, licensePath)builder.Services.AddDoconut(options => …) + inject Viewer
LicenseStatic Viewer.DoconutLicense(path) + SetLicensePlugin(...) per pluginoptions.LicensePath / LicenseContent / LicenseStream — satu lisensi, penemuan otomatis untuk file plugin
Openviewer.OpenDocument(...) (sinkron)await viewer.OpenDocumentAsync(...)
Closeviewer.CloseDocument() atau viewer.Dispose()viewer.CloseDocument(token) — Viewer bukan IDisposable
LifetimeViewer mengimplementasikan IDisposable, menyimpan dokumen terbukaViewer bersifat stateless; sesi hidup di cache dengan token
Converterproperti viewer.ConverterPlugin Converter (AddPlugin<ConverterPlugin>()) + layanan DocumentConverter
Config classesnamespace Doconut.Configs.View.*Semua berada di namespace Doconut
MiddlewarePenangan manualapp.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 widget div dan endpoint Anda mengembalikan token (Quick Start menunjukkan pola tersebut).
  • Metode lisensi statis → sumber lisensi DoconutOptions.
  • OpenDocument sinkron → await OpenDocumentAsync.
  • Viewer.ReferenceScripts() / ReferenceCss() ada di kedua dunia — versi .NET 8 menerima objek ScriptConfig/CssConfig dan dibatasi lisensi.
  • Properti kontrol (ShowThumbs, PageZoom, FixedZoom, …) → nama yang sama pada ViewerConfig / opsi JS docViewer.
  • Metode ekspor yang mengembalikan byte[] → API ekspor anotasi‑async pada Viewer.

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

  1. Ganti paket; selaraskan versi paket plugin.
  2. Pindahkan pengaturan lisensi ke dalam AddDoconut(); hapus panggilan lisensi statis.
  3. Ubah panggilan buka menjadi async; ganti Dispose/CloseDocument tanpa parameter dengan CloseDocument(token).
  4. Ganti penggunaan viewer.Converter dengan pendaftaran plugin Converter + DocumentConverter.
  5. Uji kembali jalur keamanan: AddSession()/UseSession() kini diperlukan dengan keamanan default (plus AddDistributedMemoryCache() dalam aplikasi minimal‑API).

Apakah halaman ini membantu?