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
- 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, yIsVersionValiddevuelvefalse. 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 las 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 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ón | Construir Viewer(cache, httpContextAccessor, licensePath) | builder.Services.AddDoconut(options => …) + inyectar Viewer |
| Licencia | Método estático Viewer.DoconutLicense(path) + SetLicensePlugin(...) por complemento | options.LicensePath / LicenseContent / LicenseStream — una licencia, detección automática para archivos de complementos |
| Abrir | viewer.OpenDocument(...) (sincrónico) | await viewer.OpenDocumentAsync(...) |
| Cerrar | viewer.CloseDocument() o viewer.Dispose() | viewer.CloseDocument(token) — Viewer no es IDisposable |
| Duración de vida | Viewer implementa IDisposable, mantiene el documento abierto | Viewer es sin estado; las sesiones viven en la caché bajo tokens |
| Convertidor | Propiedad viewer.Converter | El complemento Converter (AddPlugin<ConverterPlugin>()) + el servicio DocumentConverter |
| Clases de configuración | Espacios de nombres Doconut.Configs.View.* | Todo en el espacio de nombres Doconut |
| Middleware | Cableado manual de manejadores | 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 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 dedivdel 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. OpenDocumentsincrónico →await OpenDocumentAsync.Viewer.ReferenceScripts()/ReferenceCss()existen en ambos mundos — 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 APIs async de exportación de anotaciones enViewer.
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
- Intercambia paquetes; alinea las versiones de los paquetes de complementos.
- Mueve la configuración de la licencia a
AddDoconut(); elimina las llamadas estáticas a la licencia. - Haz que las llamadas de apertura sean async; reemplaza
Dispose/CloseDocumentsin parámetros conCloseDocument(token). - Reemplaza los usos de
viewer.Convertercon el registro del complemento Converter +DocumentConverter. - Vuelve a probar la ruta de seguridad:
AddSession()/UseSession()ahora son obligatorios con la seguridad predeterminada.
¿Fue útil esta página?