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
- Actualiza el paquete (y cualquier paquete de complementos — mantén las versiones alineadas):
dotnet add package Doconut.NET8
dotnet add package Doconut.NET8.Dicom- 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 —
OpenDocumentAsynclanzaLicenseException(fallo rápido); no recurre a una marca de agua, yIsVersionValidpasa afalse. Renueva, reemplaza el archivo.licy reinicia la aplicación para queAddDoconut()cargue la nueva licencia. - Reconstruye y permite que NuGet restaure las versiones declaradas de dependencias — no vuelvas a fijar
System.Text.JsonoSystem.Drawing.Common(consulta Solución de problemas para los errores exactos que causa una degradación). - 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ón | Construct Viewer(cache, httpContextAccessor, licensePath) | builder.Services.AddDoconut(options => …) + inject Viewer |
| Licencia | Static Viewer.DoconutLicense(path) + SetLicensePlugin(...) per plugin | options.LicensePath / LicenseContent / LicenseStream — one license, auto-discovery for plugin files |
| Abrir | viewer.OpenDocument(...) (synchronous) | await viewer.OpenDocumentAsync(...) |
| Cerrar | viewer.CloseDocument() or viewer.Dispose() | viewer.CloseDocument(token) — Viewer is not IDisposable |
| Duración | Viewer implements IDisposable, holds the open document | Viewer is stateless; sessions live in the cache under tokens |
| Convertidor | viewer.Converter property | The Converter plugin (AddPlugin<ConverterPlugin>()) + the DocumentConverter service |
| Clases de configuración | Doconut.Configs.View.* namespaces | All in the Doconut namespace |
| Middleware | Manual handler wiring | app.UseDoconutResources() + app.UseDoconut() |
Un ejemplo típico antes/después:
// .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());// .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 dedivdel 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. OpenDocumentsíncrono →await OpenDocumentAsync.Viewer.ReferenceScripts()/ReferenceCss()existen en ambos entornos — las versiones de .NET 8 aceptan objetosScriptConfig/CssConfigy están restringidas por licencia.- Propiedades del control (
ShowThumbs,PageZoom,FixedZoom, …) → los mismos nombres enViewerConfig/ las opciones JSdocViewer. - Métodos de exportación que devuelven
byte[]→ las API de exportación asíncrona de anotaciones enViewer.
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
- Intercambia los paquetes; alinea las versiones de los paquetes de complementos.
- Mueve la configuración de licencia a
AddDoconut(); elimina las llamadas estáticas a la licencia. - Haz que las llamadas de apertura sean asíncronas; reemplaza
Dispose/CloseDocumentsin parámetros conCloseDocument(token). - Reemplaza los usos de
viewer.Convertercon el registro del plugin Convertidor +DocumentConverter. - Vuelve a probar la ruta de seguridad:
AddSession()/UseSession()ahora son obligatorios con la seguridad predeterminada.
¿Fue útil esta página?