Đóng gói ứng dụng
Nội dung bài · 5 mục
- 1.Khái niệm
- 2.Ví dụ
- 3.Thử ngay
- 4.Lỗi hay gặp
- 5.Tóm tắt
dotnet run chỉ chạy được trên máy có mã nguồn và .NET SDK. Máy của nhân
viên cửa hàng không có những thứ đó. Bài này đóng gói app thành một file
.exe, chép sang máy khác là chạy.
Khái niệm
📦 Publish: compile app ở chế độ Release và gom mọi thứ nó cần vào một thư mục để đem đi cài.
🧳 Self-contained: bản publish mang theo cả .NET, nên máy chạy nó không cần cài .NET.
Ví dụ
dotnet publish -c Release -r win-x64 --self-contained -p:PublishSingleFile=true -o publish-c Releasecompile bản đã tối ưu.dotnet runmặc định chạy bản Debug, dành cho lúc lập trình.-r win-x64chọn máy đích là Windows 64-bit.--self-containedmang theo .NET.PublishSingleFile=truegom tất cả vào một fileShopDesk.exe.-o publishđặt kết quả vào thư mụcpublish.
Thư mục publish có ShopDesk.exe nặng khoảng 120 MB. Phần lớn dung lượng
là .NET, Windows Forms, EF Core và thư viện Oracle đi kèm.
Thử ngay
Chạy lại lệnh trên, đổi --self-contained thành --self-contained false
và -o publish thành -o publish-nho, rồi so kích thước hai file .exe.
Đoán trước khi chạy: file .exe mới nhỏ hơn bao nhiêu? Chép nó sang một
máy chưa cài .NET thì chạy được không?
Xem kết quả
--self-contained ShopDesk.exe ~ 120 MB
--self-contained false ShopDesk.exe ~ 12 MBNhỏ hơn khoảng 10 lần, vì không mang theo .NET. Máy chưa cài .NET Desktop Runtime thì không chạy được: mở file lên chỉ thấy hộp thoại báo thiếu .NET, kèm đường dẫn tải về.
Lỗi hay gặp
Chuỗi kết nối vẫn là localhost. Trên máy nhân viên, localhost là
chính máy đó, không có Oracle. App mở lên là báo lỗi kết nối như bài Xử lý
lỗi.
// SAI — máy nhân viên không có Oracle
var cs = "User Id=shopapi;Password=shopapi_pw;"
+ "Data Source=localhost:1521/FREEPDB1";// ĐÚNG — trỏ tới máy chủ đang chạy Oracle
var cs = "User Id=shopapi;Password=shopapi_pw;"
+ "Data Source=192.168.1.10:1521/FREEPDB1";Mật khẩu viết trong code sẽ nằm luôn trong file .exe, ai có file cũng đọc
được, và đổi máy chủ là phải publish lại. App thật không đóng gói sẵn một
mật khẩu dùng chung: mỗi nhân viên có tài khoản Oracle riêng, hoặc app gọi
API thay vì nối thẳng database.
Tóm tắt
dotnet publish -c Release -r win-x64đóng gói app để đem đi.--self-containedmang theo .NET: file to hơn, không cần cài gì thêm.PublishSingleFile=truegom tất cả vào một file.exe.- Trước khi đem đi, sửa chuỗi kết nối trỏ tới máy chủ Oracle thật.
Bình luận
Đang tải bình luận…