Đó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: biên dịch 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 Releasebiên dịch 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 để mật khẩu dùng
chung trong file đi kèm .exe: mỗi nhân viên một tài khoản Oracle riêng,
hoặc app gọi API thay vì nối thẳng vào 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.
Tự kiểm tra
0/3 câuCửa hàng có 20 máy, chưa máy nào cài .NET, cũng không có người cài giúp. Nên publish thế nào?
App publish xong chạy tốt trên máy lập trình, sang máy nhân viên thì báo không kết nối được database. Nghi ngờ đầu tiên?
PublishSingleFile=true làm gì?