Migracja
Uaktualnienie do Doconut na .NET 8
Na tej stronie znajdują się dwie migracje: aktualizacja wersji pakietu w .NET 8 oraz przeniesienie integracji ze starszego frameworka Doconut (.NET 6, .NET Standard 2.0, .NET Framework 4.7) na API .NET 8.
Aktualizacja wersji pakietu
- Zaktualizuj pakiet (oraz wszystkie pakiety wtyczek — utrzymaj wersje zgodne):
bash
dotnet add package Doconut.NET8
dotnet add package Doconut.NET8.Dicom- Sprawdź okno licencji. Licencja obejmuje zakres wersji. Jeśli nowa wersja znajduje się poza tym zakresem, otwieranie jest zablokowane —
OpenDocumentAsyncrzucaLicenseException(fail-fast); nie przechodzi do znaku wodnego, aIsVersionValidzwracafalse. Odnów, wymień plik.lici uruchom ponownie aplikację, abyAddDoconut()załadował nową licencję. - Zbuduj ponownie i pozwól NuGet przywrócić zadeklarowane wersje zależności — nie przypinaj ponownie
System.Text.JsonaniSystem.Drawing.Common(zobacz sekcję Rozwiązywanie problemów, aby poznać dokładne błędy, które powoduje downgrade). - Wykonaj test dymny jednego dokumentu dla każdej rodziny formatów, której używasz.
Migracja z .NET 6 / .NET Standard 2.0
API .NET 8 to przedefiniowanie oparte na DI i asynchroniczności. Poniżej mapowanie:
| Zagadnienie | .NET 6 / Standard 2.0 | .NET 8 |
|---|---|---|
| Setup | Construct Viewer(cache, httpContextAccessor, licensePath) | builder.Services.AddDoconut(options => …) + wstrzyknij Viewer |
| License | Static Viewer.DoconutLicense(path) + SetLicensePlugin(...) dla każdej wtyczki | options.LicensePath / LicenseContent / LicenseStream — jedna licencja, automatyczne wykrywanie plików wtyczek |
| Open | viewer.OpenDocument(...) (synchroniczne) | await viewer.OpenDocumentAsync(...) |
| Close | viewer.CloseDocument() lub viewer.Dispose() | viewer.CloseDocument(token) — Viewer nie jest IDisposable |
| Lifetime | Viewer implementuje IDisposable, przechowuje otwarty dokument | Viewer jest bezstanowy; sesje przechowywane są w pamięci podręcznej pod tokenami |
| Converter | Właściwość viewer.Converter | Wtyczka Converter (AddPlugin<ConverterPlugin>()) + usługa DocumentConverter |
| Config classes | przestrzenie nazw Doconut.Configs.View.* | Wszystko w przestrzeni nazw Doconut |
| Middleware | Ręczne podłączanie obsługi | app.UseDoconutResources() + app.UseDoconut() |
Typowy przykład przed/po:
text
// .NET 6 (stare API, pokazane dla kontrastu — nie jest prawidłowe w .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 wstrzyknięty, licencja skonfigurowana raz w AddDoconut()
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { AllowSearch = true });Migracja z .NET Framework 4.7 (Web Forms)
Viewer z wersji 4.7 jest WebControl; .NET 8 zastępuje model kontrolki middleware'em + usługą DI:
- Kontrolka
<doconut:DocViewer runat=server>znika — strona hostuje parę elementówdivwidgetu, a Twój endpoint zwraca token (Quick Start pokazuje ten wzorzec). - Statyczne metody licencji → źródła licencji w
DoconutOptions. - Synchroniczne
OpenDocument→await OpenDocumentAsync. Viewer.ReferenceScripts()/ReferenceCss()istnieją w obu światach — wersje .NET 8 przyjmują obiektyScriptConfig/CssConfigi są zabezpieczone licencją.- Właściwości kontrolki (
ShowThumbs,PageZoom,FixedZoom, …) → te same nazwy wViewerConfig/ opcjach JSdocViewer. - Metody eksportu zwracające
byte[]→ asynchroniczne API eksportu adnotacji wViewer.
Zaplanuj to jako przepisanie warstwy hostingowej wokół niezmienionego konceptu: otwórz → token → widget.
Uwaga dotycząca nazewnictwa
We wszystkich frameworkach klasa to Viewer — jeśli znajdziesz DocumentViewer w starych fragmentach kodu lub artykułach firm trzecich, taki typ nigdy nie istniał w SDK.
Lista kontrolna migracji
- Zamień pakiety; dopasuj wersje pakietów wtyczek.
- Przenieś konfigurację licencji do
AddDoconut(); usuń statyczne wywołania licencji. - Uczyń wywołania otwierania asynchronicznymi; zamień
Dispose/CloseDocumentbez parametrów naCloseDocument(token). - Zastąp użycia
viewer.Converterrejestracją wtyczki Converter +DocumentConverter. - Ponownie przetestuj ścieżkę bezpieczeństwa:
AddSession()/UseSession()są teraz wymagane przy domyślnym zabezpieczeniu (plusAddDistributedMemoryCache()w aplikacji minimal-API).
Czy ta strona była pomocna?