Geçiş

Doconut'u .NET 8'de Yükseltme

Bu sayfada iki geçiş bulunur: paket sürümünü yükseltme .NET 8 içinde ve eski bir Doconut çerçevesinden bir entegrasyonu taşıma (.NET 6, .NET Standard 2.0, .NET Framework 4.7) .NET 8 API'sine.

Paket sürümünü yükseltme

  1. Paketi güncelleyin (ve varsa eklenti paketlerini — sürümleri hizalı tutun):
bash
dotnet add package Doconut.NET8
dotnet add package Doconut.NET8.Dicom
  1. Lisans penceresini kontrol edin. Bir lisans bir sürüm aralığını kapsar. Yeni sürüm bu aralığın dışına çıkarsa, açma engellenir — OpenDocumentAsync fırlatır LicenseException (fail-fast); bir filigrana geri dönmez ve IsVersionValid dönüştürür false. Lisansı yenileyin, .lic değiştirin ve uygulamayı yeniden başlatın, böylece AddDoconut() yeni lisansı yükler.
  2. Yeniden derleyin ve NuGet'in bildirilen bağımlılık sürümlerini geri yüklemesine izin verin — System.Text.Json veya System.Drawing.Common yeniden sabitlemeyin (bir düşürmenin neden olduğu kesin hatalar için Sorun Giderme bölümüne bakın).
  3. Kullandığınız her format ailesi için bir belgeyle smoke-test yapın.

.NET 6 / .NET Standard 2.0'dan Geçiş

.NET 8 API, DI ve async etrafında yeniden tasarlanmıştır. Eşleme:

Konu.NET 6 / Standard 2.0.NET 8
KurulumOluştur Viewer(cache, httpContextAccessor, licensePath)builder.Services.AddDoconut(options => …) + inject Viewer
LisansStatik Viewer.DoconutLicense(path) + SetLicensePlugin(...) her eklenti içinoptions.LicensePath / LicenseContent / LicenseStream — bir lisans, eklenti dosyaları için otomatik keşif
Açviewer.OpenDocument(...) (senkron)await viewer.OpenDocumentAsync(...)
Kapatviewer.CloseDocument() veya viewer.Dispose()viewer.CloseDocument(token) — Viewer değil IDisposable
ÖmürViewer implements IDisposable, açık belgeyi tutarViewer durumsuz; oturumlar tokenlar altında önbellekte yaşar
Dönüştürücüviewer.Converter özelliğiDönüştürücü eklentisi (AddPlugin<ConverterPlugin>()) + DocumentConverter servisi
Yapılandırma sınıflarıDoconut.Configs.View.* ad alanlarıHepsi Doconut ad alanında
Ara KatmanManuel işleyici bağlamaapp.UseDoconutResources() + app.UseDoconut()

Tipik bir önce/sonra:

text
// .NET 6 (eski API, karşılaştırma için gösterildi — .NET 8'de geçerli değil)
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 enjekte edildi, lisans AddDoconut() içinde bir kez yapılandırıldı
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { AllowSearch = true });

.NET Framework 4.7'den Geçiş (Web Forms)

4.7 Viewer bir WebControl; .NET 8 kontrol modelini ara katman + bir DI servisi ile değiştirir:

  • <doconut:DocViewer runat=server> kontrolü kaybolur — sayfa widget div çiftini barındırır ve uç noktanız tokenı döndürür (Quick Start deseni gösterir).
  • Statik lisans yöntemleri → DoconutOptions lisans kaynakları.
  • Senkron OpenDocument → await OpenDocumentAsync.
  • Viewer.ReferenceScripts() / ReferenceCss() her iki dünyada da mevcut — .NET 8 sürümleri ScriptConfig/CssConfig nesnelerini alır ve lisans kontrollüdür.
  • Kontrol özellikleri (ShowThumbs, PageZoom, FixedZoom, …) → aynı adlar ViewerConfig / docViewer JS seçeneklerinde.
  • byte[] döndüren dışa aktarım yöntemleri → Viewer üzerindeki async açıklama-dışa aktarım API'leri.

Bunu, değişmeyen bir kavram etrafında barındırma katmanının yeniden yazımı olarak planlayın: aç → token → widget.

İsimlendirme notu

Tüm çerçevelerde sınıf Viewer'dir — eski kod parçacıklarında veya üçüncü‑taraf makalelerde DocumentViewer bulursanız, bu tip SDK'da hiç bulunmamıştır.

Geçiş kontrol listesi

  1. Paketleri değiştirin; eklenti paket sürümlerini hizalayın.
  2. Lisans kurulumunu AddDoconut() içine taşıyın; statik lisans çağrılarını silin.
  3. Açma çağrılarını async yapın; Dispose/parametresiz CloseDocument yerine CloseDocument(token) kullanın.
  4. viewer.Converter kullanımlarını Dönüştürücü eklenti kaydı + DocumentConverter ile değiştirin.
  5. Güvenlik yolunu yeniden test edin: AddSession()/UseSession() artık varsayılan güvenlikle gereklidir (minimal-API uygulamasında AddDistributedMemoryCache() ek olarak).

Bu sayfa yardımcı oldu mu?