Migração

Atualize o Doconut para .NET 8

Duas migrações são apresentadas nesta página: 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 é bloqueada — OpenDocumentAsync 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 (veja a seção Solução de Problemas para os erros exatos que uma desatualização causa).
  3. Faça um teste rápido (smoke-test) de um documento por família de formato que você utiliza.

Migrando do .NET 6 / .NET Standard 2.0

A API do .NET 8 foi redesenhada em torno de DI e async. O mapeamento:

Assunto.NET 6 / Standard 2.0.NET 8
ConfiguraçãoConstrua Viewer(cache, httpContextAccessor, licensePath)builder.Services.AddDoconut(options => …) + injete Viewer
LicençaEstático Viewer.DoconutLicense(path) + SetLicensePlugin(...) por pluginoptions.LicensePath / LicenseContent / LicenseStream — uma licença, descoberta automática para arquivos de plugin
Abrirviewer.OpenDocument(...) (síncrono)await viewer.OpenDocumentAsync(...)
Fecharviewer.CloseDocument() ou viewer.Dispose()viewer.CloseDocument(token) — Viewer não é IDisposable
Tempo de vidaViewer implementa IDisposable, mantém o documento abertoViewer é sem estado; sessões vivem no cache sob tokens
ConversorPropriedade viewer.ConverterPlugin Conversor (AddPlugin<ConverterPlugin>()) + serviço DocumentConverter
Classes de configuraçãoNamespaces Doconut.Configs.View.*Tudo no namespace Doconut
MiddlewareEncadeamento manual de manipuladoresapp.UseDoconutResources() + app.UseDoconut()

Um exemplo típico antes/depois:

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 do .NET Framework 4.7 (Web Forms)

O Viewer da versão 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 (o Guia de Início Rápido mostra o padrão).
  • Métodos de licença estáticos → fontes de licença em 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 no 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 Conversor + 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?