Migración

Actualiza Doconut a .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 anterior (.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á bloqueada — OpenDocumentAsync lanza LicenseException (fallo rápido); no recurre a una marca de agua, y IsVersionValid pasa a 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 familia de formato que utilices.

Migrando desde .NET 6 / .NET Standard 2.0

La API de .NET 8 es un rediseño centrado en DI y asincronía. El mapeo:

Aspecto.NET 6 / Standard 2.0.NET 8
ConfiguraciónConstruct Viewer(cache, httpContextAccessor, licensePath)builder.Services.AddDoconut(options => …) + inject Viewer
LicenciaStatic Viewer.DoconutLicense(path) + SetLicensePlugin(...) per pluginoptions.LicensePath / LicenseContent / LicenseStream — one license, auto-discovery for plugin files
Abrirviewer.OpenDocument(...) (synchronous)await viewer.OpenDocumentAsync(...)
Cerrarviewer.CloseDocument() or viewer.Dispose()viewer.CloseDocument(token) — Viewer is not IDisposable
DuraciónViewer implements IDisposable, holds the open documentViewer is stateless; sessions live in the cache under tokens
Convertidorviewer.Converter propertyThe Converter plugin (AddPlugin<ConverterPlugin>()) + the DocumentConverter service
Clases de configuraciónDoconut.Configs.View.* namespacesAll in the Doconut namespace
MiddlewareManual handler wiringapp.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 injected, license configured once in AddDoconut()
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { AllowSearch = true });

Migrando desde .NET Framework 4.7 (Web Forms)

El Viewer de 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 síncrono → 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 asíncrona de anotaciones 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. Intercambia los paquetes; alinea las versiones de los paquetes de complementos.
  2. Mueve la configuración de licencia a AddDoconut(); elimina las llamadas estáticas a la licencia.
  3. Haz que las llamadas de apertura sean asíncronas; reemplaza Dispose/CloseDocument sin parámetros con CloseDocument(token).
  4. Reemplaza los usos de viewer.Converter con el registro del plugin Convertidor + DocumentConverter.
  5. Vuelve a probar la ruta de seguridad: AddSession()/UseSession() ahora son obligatorios con la seguridad predeterminada.

¿Fue útil esta página?