Cài đặt

Thêm Doconut vào dự án .NET Standard 2.1 của bạn

Trình xem Doconut cơ bản cho .NET Standard được cung cấp dưới dạng một gói NuGet có thể tích hợp vào bất kỳ ứng dụng ASP.NET Core nào. Các plugin tùy chọn sử dụng các gói riêng biệt. Trang này cài đặt gói cơ bản, xác nhận máy chủ của bạn có thể sử dụng nó, và đăng ký middleware — mức tối thiểu cần thiết trước lần render đầu tiên.

Kiểm tra khung nền tảng máy chủ trước tiên

Thư viện nhắm mục tiêu netstandard2.1. Đây là một hợp đồng hẹp hơn so với bản build netstandard2.0 trước đó, và đây là điều đầu tiên cần xác minh:

Máy chủĐược hỗ trợ
.NET Core 3.0 hoặc sau, bao gồm .NET 5/6/7/8Có
.NET Framework (bất kỳ phiên bản nào)Không — netstandard2.1 không thể được tiêu thụ bởi .NET Framework

Nếu ứng dụng chạy trên .NET Framework, đây không phải là gói đúng. Hãy sử dụng Doconut.NETFramework thay thế; từ 26.9.0 nó yêu cầu .NET Framework 4.7.2. Các ứng dụng tham chiếu được phát hành cùng bản này nhắm mục tiêu net8.0.

Cài đặt gói

bash
dotnet add package Doconut.NETStandard

Lệnh không chỉ định phiên bản sẽ cài đặt bản phát hành ổn định mới nhất. Để tái tạo chính xác bản phát hành 26.8.0 hiện tại, hãy truyền phiên bản như một tùy chọn:

bash
dotnet add package Doconut.NETStandard --version 26.8.0

Doconut.NETStandard là ID gói. Hậu tố .26.8.0 thuộc về tên tệp Doconut.NETStandard.26.8.0.nupkg đã tải xuống và không phải là một phần của ID.

Số phiên bản là thế hệ

Điều này quan trọng hơn ở đây so với tên gói. Cả hai thế hệ của thư viện .NET Standard đều phát hành dưới cùng một ID gói, và chỉ có phiên bản phân biệt chúng:

Phiên bảnMục tiêuAPI
26.7.0 và thấp hơnnetstandard2.0tích hợp trước đây
26.8.0 và cao hơnnetstandard2.1tích hợp được tài liệu ở đây

Không có shim tương thích và không có gói song song. Nâng cấp phiên bản là việc nâng cấp, và trình biên dịch sẽ báo ngay sự khác biệt API.

Đừng chọn tài liệu chỉ dựa trên tên gói:

  • new Viewer(_cache, _accessor, …), UnSafeMode, synchronous OpenDocument(...), viewer.InitCache(), UseDoconutWebFarm, và các script trình xem được sao chép thủ công xác định tích hợp trước đây;
  • AddDoconut(), UseDoconutResources(), một Viewer được tiêm, và OpenDocumentAsync(...) xác định tích hợp hiện tại được tài liệu ở đây.

Bản dịch của hướng dẫn cài đặt trước đây vẫn khả dụng. Sử dụng hướng dẫn di chuyển để thay đổi thế hệ; việc cập nhật gói không tự động chuyển đổi khởi động, vòng đời trình xem, hoặc tài nguyên trình duyệt.

Đăng ký Doconut

AddDoconut() là điểm vào duy nhất để đăng ký — có một overload duy nhất, và nó kết nối dịch vụ Viewer, dịch vụ giấy phép, và cơ sở hạ tầng render vào container DI.

Hai lời gọi middleware hoàn thiện việc thiết lập, và thứ tự của chúng quan trọng: UseDoconutResources() phải chạy trước UseDoconut(). UseDoconut() là middleware cuối cùng, vì vậy nếu gọi nó trước sẽ khiến mọi yêu cầu tới tài nguyên /doconut-res không tới trình xử lý tài nguyên và trả về 404. Kết nối session cũng cần thiết — bảo mật tài liệu mặc định của Doconut xác thực mọi yêu cầu trang dựa trên trạng thái session của ASP.NET.

csharp
builder.Services.AddDoconut(options =>
{
    options.LicensePath = "Doconut.Viewer.lic";
});
builder.Services.AddDistributedMemoryCache(); // trạng thái session cần một cache (MVC/Razor Pages đã thêm sẵn)
builder.Services.AddSession(); // bảo mật tài liệu Doconut dựa trên trạng thái session của ASP.NET

app.UseSession();          // gọi UseSession() trước UseDoconut()
app.UseDoconutResources(); // phải đăng ký trước UseDoconut()
app.UseDoconut();

Không gian tên

Các kiểu cấu hình không còn phân tán qua bốn không gian tên. Trong bản phát hành này, hầu hết mọi thứ đều nằm trong không gian tên gốc Doconut:

csharp
using Doconut;                       // Viewer, DoconutOptions, DocOptions, tất cả cấu hình định dạng
using Doconut.Middleware;            // AddDoconut, UseDoconut, UseDoconutResources
using Doconut.Clouds;                // cấu hình đám mây và chia sẻ tệp
using Doconut.Configs.Conversion;    // ConversionTarget

Tên các kiểu không thay đổi — PdfConfig, WordConfig, ExcelConfig, CssConfig, ScriptConfig và các phần còn lại vẫn tồn tại. Nếu bạn đang di chuyển một ứng dụng hiện có, hầu hết các tệp chỉ cần xóa hai dòng using; xem hướng dẫn di chuyển.

Tất cả các tùy chọn

DoconutOptions chấp nhận các thuộc tính có thể thiết lập sau. Mỗi thuộc tính đều là tùy chọn — các giá trị mặc định dưới đây sẽ áp dụng khi một thuộc tính không được đặt.

Thuộc tínhMặc địnhMô tả
ShowDoconutInfofalseKhi true, một yêu cầu không có token sẽ trả về một biểu ngữ phiên bản thay vì 404. Hữu ích như một kiểm tra nhanh; nên tắt trong môi trường sản xuất.
UnsafeModefalseKhi true, bỏ qua kiểm tra bảo mật ASP.NET-session trên các yêu cầu trang. Nên tắt trong môi trường sản xuất. Lưu ý cách viết — thư viện trước gọi nó là UnSafeMode.
MiddlewarePath"/doconut"Giá trị điều phối cho endpoint hình ảnh trang. Nó được xác thực, nhưng không tự tạo nhánh; hãy giữ nó đồng nhất với ánh xạ UseDoconut() thực tế và BasePath của client.
ResourcesPath"/doconut-res"Nơi các tài nguyên JS/CSS/hình ảnh được nhúng được phục vụ từ.
LicensePath"" (empty string)Đường dẫn tới tệp giấy phép. Trống có nghĩa là sẽ chuyển sang nguồn tiếp theo, sau đó tự động tìm kiếm.
LicenseContent"" (empty string)Nội dung giấy phép thô — từ biến môi trường, trình quản lý bí mật, hoặc cơ sở dữ liệu.
LicenseStreamnullGiấy phép dưới dạng luồng, đọc một lần khi khởi động.
ResetLicensefalseCờ tương thích dự trữ. Giấy phép được đọc trong AddDoconut(); khởi động lại ứng dụng sau khi thay thế giấy phép.

Ưu tiên giấy phép khi có hơn một nguồn được đặt: LicenseStream thắng LicenseContent thắng LicensePath thắng tự động tìm kiếm — xem License Setup.

csharp
builder.Services.AddDoconut(options =>
{
    options.LicensePath     = "Doconut.Viewer.lic";
    options.MiddlewarePath  = "/doconut";     // phối hợp với ánh xạ ứng dụng và BasePath của client
    options.ResourcesPath   = "/doconut-res"; // nơi các JS/CSS/hình ảnh của trình xem được phục vụ
    options.UnsafeMode      = false;          // giữ bảo mật session bật
    options.ShowDoconutInfo = false;
});

Các bước tiếp theo

Trang này có hữu ích không?