Migração

Atualize o Doconut para .NET 8

Esta página contém duas migrações: atualizar a versão do pacote dentro do .NET 8, e mover uma integração de um framework Doconut mais antigo (.NET 6, .NET Standard 2.0, .NET Framework 4.7) para a API do .NET 8.

Atualizando a versão do pacote

  1. Atualize o pacote (e quaisquer pacotes de plugins — mantenha as versões alinhadas):
bash
dotnet add package Doconut.NET8
dotnet add package Doconut.NET8.Dicom
  1. Verifique a janela de licença. Uma licença cobre um intervalo de versões. Se a nova versão ficar fora desse intervalo, a abertura é bloqueadaOpenDocumentAsync lança LicenseException (falha rápida); não recorre a uma marca d'água, e IsVersionValid passa a false. Renove, substitua o .lic e reinicie a aplicação para que AddDoconut() carregue a nova licença.
  2. Recompile e deixe o NuGet restaurar as versões declaradas das dependências — não fixe novamente System.Text.Json ou System.Drawing.Common (consulte Solução de Problemas para os erros exatos que uma desatualização causa).
  3. Faça um teste rápido com um documento de cada família de formato que você usa.

Migrando do .NET 6 / .NET Standard 2.0

A API do .NET 8 é um redesign em torno de DI e async. O mapeamento:

Preocupação.NET 6 / Standard 2.0.NET 8
SetupConstrua Viewer(cache, httpContextAccessor, licensePath)builder.Services.AddDoconut(options => …) + injete Viewer
LicenseMétodo estático Viewer.DoconutLicense(path) + SetLicensePlugin(...) por pluginoptions.LicensePath / LicenseContent / LicenseStream — uma licença, descoberta automática para arquivos de plugin
Openviewer.OpenDocument(...) (síncrono)await viewer.OpenDocumentAsync(...)
Closeviewer.CloseDocument() ou viewer.Dispose()viewer.CloseDocument(token)Viewer não é IDisposable
LifetimeViewer implementa IDisposable, mantém o documento abertoViewer é sem estado; sessões vivem no cache sob tokens
ConverterPropriedade viewer.ConverterO plugin Converter (AddPlugin<ConverterPlugin>()) + o serviço DocumentConverter
Config classesNamespaces Doconut.Configs.View.*Todos no namespace Doconut
MiddlewareEncadeamento manual de manipuladoresapp.UseDoconutResources() + app.UseDoconut()

Um exemplo típico antes/depois:

text
// .NET 6 (API antiga, mostrada para contraste — não válida no .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 do .NET Framework 4.7 (Web Forms)

O Viewer 4.7 é um WebControl; o .NET 8 substitui o modelo de controle por middleware + um serviço DI:

  • O controle <doconut:DocViewer runat=server> desaparece — a página hospeda o par de div do widget e seu endpoint devolve o token (Quick Start mostra o padrão).
  • Métodos de licença estáticos → fontes de licença DoconutOptions.
  • OpenDocument síncrono → await OpenDocumentAsync.
  • Viewer.ReferenceScripts() / ReferenceCss() existem em ambos os mundos — as versões do .NET 8 recebem objetos ScriptConfig/CssConfig e são controladas por licença.
  • Propriedades de controle (ShowThumbs, PageZoom, FixedZoom, …) → os mesmos nomes em ViewerConfig / nas opções JS docViewer.
  • Métodos de exportação que retornam byte[] → as APIs assíncronas de exportação de anotações em Viewer.

Planeje isso como uma reescrita da camada de hospedagem em torno de um conceito inalterado: abrir → token → widget.

Observação sobre nomenclatura

Em todos os frameworks a classe é Viewer — se você encontrar DocumentViewer em trechos antigos ou artigos de terceiros, esse tipo nunca existiu no SDK.

Lista de verificação da migração

  1. Troque os pacotes; alinhe as versões dos pacotes de plugins.
  2. Mova a configuração da licença para AddDoconut(); exclua chamadas de licença estáticas.
  3. Torne as chamadas de abertura assíncronas; substitua Dispose/CloseDocument sem parâmetros por CloseDocument(token).
  4. Substitua os usos de viewer.Converter pelo registro do plugin Converter + DocumentConverter.
  5. Re‑teste o caminho de segurança: AddSession()/UseSession() agora são obrigatórios com a segurança padrão.

Esta página foi útil?