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

  1. Perbarui paket (dan semua paket plugin — 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 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 ulang 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 seputar DI dan async. Pemetaan:

Aspek.NET 6 / Standard 2.0.NET 8
PengaturanConstruct Viewer(cache, httpContextAccessor, licensePath)builder.Services.AddDoconut(options => …) + inject Viewer
LisensiStatic Viewer.DoconutLicense(path) + SetLicensePlugin(...) per pluginoptions.LicensePath / LicenseContent / LicenseStream — satu lisensi, penemuan otomatis untuk berkas plugin
Bukaviewer.OpenDocument(...) (sinkron)await viewer.OpenDocumentAsync(...)
Tutupviewer.CloseDocument() atau viewer.Dispose()viewer.CloseDocument(token) — Viewer bukan IDisposable
Masa HidupViewer mengimplementasikan IDisposable, menahan dokumen terbukaViewer bersifat stateless; sesi hidup di cache berdasarkan token
Konverterproperti viewer.ConverterPlugin Converter (AddPlugin<ConverterPlugin>()) + layanan DocumentConverter
Kelas konfigurasinamespace Doconut.Configs.View.*Semua berada di namespace Doconut
MiddlewarePenangan manualapp.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 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 di SDK.

Daftar Periksa Migrasi

  1. Tukar 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.

Apakah halaman ini membantu?