Migración

Actualiza a Doconut en .NET 8

En esta página se presentan dos migraciones: actualizar la versión del paquete dentro de .NET 8, y mover una integración desde un framework Doconut más antiguo (.NET 6, .NET Standard 2.0, .NET Framework 4.7) a la API de .NET 8.

Actualizando la versión del paquete

  1. Actualiza el paquete (y cualquier paquete de complementos — mantén las versiones alineadas):
bash
dotnet add package Doconut.NET8
dotnet add package Doconut.NET8.Dicom
  1. Revisa la ventana de licencia. Una licencia cubre un rango de versiones. Si la nueva versión queda fuera de ese rango, la apertura está bloqueada — OpenDocumentAsync lanza LicenseException (fallo rápido); no recurre a una marca de agua, y IsVersionValid devuelve false. Renueva, reemplaza el archivo .lic y reinicia la aplicación para que AddDoconut() cargue la nueva licencia.

  2. Reconstruye y permite que NuGet restaure las versiones declaradas de dependencias — no vuelvas a fijar System.Text.Json o System.Drawing.Common (consulta Solución de problemas para los errores exactos que causa una degradación).

  3. Realiza una prueba rápida con un documento por cada familia de formatos que utilices.

Migrando desde .NET 6 / .NET Standard 2.0

La API de .NET 8 es un rediseño alrededor de DI y asincronía. La correspondencia:

Aspecto.NET 6 / Standard 2.0.NET 8
ConfiguraciónConstruir Viewer(cache, httpContextAccessor, licensePath)builder.Services.AddDoconut(options => …) + inyectar Viewer
LicenciaViewer.DoconutLicense(path) estático + SetLicensePlugin(...) por complementooptions.LicensePath / LicenseContent / LicenseStream — una licencia, descubrimiento automático para archivos de complementos
Abrirviewer.OpenDocument(...) (sincrónico)await viewer.OpenDocumentAsync(...)
Cerrarviewer.CloseDocument() o viewer.Dispose()viewer.CloseDocument(token) — Viewer no es IDisposable
Tiempo de vidaViewer implementa IDisposable, mantiene el documento abiertoViewer es sin estado; las sesiones viven en la caché bajo tokens
ConvertidorPropiedad viewer.ConverterEl complemento Convertidor (AddPlugin<ConverterPlugin>()) + el servicio DocumentConverter
Clases de configuraciónEspacios de nombres Doconut.Configs.View.*Todos en el espacio de nombres Doconut
MiddlewareEnlace manual del manejadorapp.UseDoconutResources() + app.UseDoconut()

Un ejemplo típico antes/después:

text
// .NET 6 (API antigua, mostrada como contraste — no válida en .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 inyectado, licencia configurada una vez en AddDoconut()
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { AllowSearch = true });

Migrando desde .NET Framework 4.7 (Web Forms)

El Viewer 4.7 es un WebControl; .NET 8 reemplaza el modelo de control con middleware + un servicio DI:

  • El control <doconut:DocViewer runat=server> desaparece — la página aloja el par de div del widget y tu endpoint devuelve el token (Quick Start muestra el patrón).
  • Los métodos de licencia estáticos → fuentes de licencia en DoconutOptions.
  • OpenDocument sincrónico → await OpenDocumentAsync.
  • Viewer.ReferenceScripts() / ReferenceCss() existen en ambos entornos — las versiones de .NET 8 aceptan objetos ScriptConfig/CssConfig y están restringidas por licencia.
  • Propiedades del control (ShowThumbs, PageZoom, FixedZoom, …) → los mismos nombres en ViewerConfig / las opciones JS docViewer.
  • Métodos de exportación que devuelven byte[] → las API de exportación de anotaciones asincrónicas en Viewer.

Planifica esto como una reescritura de la capa de alojamiento alrededor de un concepto sin cambios: abrir → token → widget.

Nota sobre nombres

En todos los frameworks la clase es Viewer — si encuentras DocumentViewer en fragmentos antiguos o artículos de terceros, ese tipo nunca existió en el SDK.

Lista de verificación de migración

  1. Cambia los paquetes; alinea las versiones de los paquetes de complementos.
  2. Mueve la configuración de la licencia a AddDoconut(); elimina las llamadas estáticas a la licencia.
  3. Haz que las llamadas de apertura sean asincrónicas; reemplaza Dispose/CloseDocument sin parámetros con CloseDocument(token).
  4. Sustituye los usos de viewer.Converter por el registro del complemento Converter + DocumentConverter.
  5. Vuelve a probar la ruta de seguridad: ahora AddSession()/UseSession() son obligatorios con la seguridad predeterminada (más AddDistributedMemoryCache() en una aplicación minimal-API).

¿Fue útil esta página?