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
- 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- 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 —
OpenDocumentAsynclançaLicenseException(falha rápida); não recorre a uma marca d'água, eIsVersionValidpassa afalse. Renove, substitua o.lice reinicie a aplicação para queAddDoconut()carregue a nova licença. - Recompile e deixe o NuGet restaurar as versões declaradas das dependências — não fixe novamente
System.Text.JsonouSystem.Drawing.Common(consulte Solução de Problemas para os erros exatos que uma desatualização causa). - 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 |
|---|---|---|
| Setup | Construa Viewer(cache, httpContextAccessor, licensePath) | builder.Services.AddDoconut(options => …) + injete Viewer |
| License | Método estático Viewer.DoconutLicense(path) + SetLicensePlugin(...) por plugin | options.LicensePath / LicenseContent / LicenseStream — uma licença, descoberta automática para arquivos de plugin |
| Open | viewer.OpenDocument(...) (síncrono) | await viewer.OpenDocumentAsync(...) |
| Close | viewer.CloseDocument() ou viewer.Dispose() | viewer.CloseDocument(token) — Viewer não é IDisposable |
| Lifetime | Viewer implementa IDisposable, mantém o documento aberto | Viewer é sem estado; sessões vivem no cache sob tokens |
| Converter | Propriedade viewer.Converter | O plugin Converter (AddPlugin<ConverterPlugin>()) + o serviço DocumentConverter |
| Config classes | Namespaces Doconut.Configs.View.* | Todos no namespace Doconut |
| Middleware | Encadeamento manual de manipuladores | app.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 dedivdo 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. OpenDocumentsíncrono →await OpenDocumentAsync.Viewer.ReferenceScripts()/ReferenceCss()existem em ambos os mundos — as versões do .NET 8 recebem objetosScriptConfig/CssConfige são controladas por licença.- Propriedades de controle (
ShowThumbs,PageZoom,FixedZoom, …) → os mesmos nomes emViewerConfig/ nas opções JSdocViewer. - Métodos de exportação que retornam
byte[]→ as APIs assíncronas de exportação de anotações emViewer.
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
- Troque os pacotes; alinhe as versões dos pacotes de plugins.
- Mova a configuração da licença para
AddDoconut(); exclua chamadas de licença estáticas. - Torne as chamadas de abertura assíncronas; substitua
Dispose/CloseDocumentsem parâmetros porCloseDocument(token). - Substitua os usos de
viewer.Converterpelo registro do plugin Converter +DocumentConverter. - 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?