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

  1. Perbarui paket (dan paket plugin apa pun — pertahankan versi yang 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 diblokirOpenDocumentAsync melempar LicenseException (gagal cepat); tidak kembali ke watermark, dan IsVersionValid menjadi false. Perbarui, ganti file .lic, dan mulai ulang 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

API .NET 8 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 tidak memiliki state; sesi hidup di cache berdasarkan 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 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());
csharp
// .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 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‑annotasi 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 pemanggilan lisensi statis.
  3. Ubah pemanggilan 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.

Apakah halaman ini membantu?