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. Verifica la ventana de licencia. Una licencia cubre un rango de versiones. Si la nueva versión queda fuera de ese rango, la apertura está bloqueadaOpenDocumentAsync 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 las 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 async. El mapeo:

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

Un ejemplo típico antes/después:

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 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 (Inicio rápido muestra el patrón).
  • Métodos estáticos de licencia → fuentes de licencia en DoconutOptions.
  • OpenDocument sincrónico → await OpenDocumentAsync.
  • Viewer.ReferenceScripts() / ReferenceCss() existen en ambos mundos — 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 APIs async de exportación de anotaciones en Viewer.

Planifica esta migración 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. Intercambia 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 async; reemplaza Dispose/CloseDocument sin parámetros con CloseDocument(token).
  4. Reemplaza los usos de viewer.Converter con el registro del complemento Converter + DocumentConverter.
  5. Vuelve a probar la ruta de seguridad: AddSession()/UseSession() ahora son obligatorios con la seguridad predeterminada.

¿Fue útil esta página?