LazyCodet

a

13:57:52 1/4/2023 - 3474 views -
Programming

Hướng dẫn đóng gói source code C# ra file exe và kèm theo database Sql Server

Giới thiệu

- Đóng gói là bước cuối cùng của quá trình xây dựng ứng dụng C# để phân phối cho các người dùng ở trên các máy tính khác sử dụng.

- Có nhiều cách để đóng gói phần mềm nhưng mình đã tìm hiểu được một cách mà không cần phải dùng bất kì phần mềm thứ 3 nào mà có hỗ trợ sẵn trên Visual Studio, nên có vẻ sẽ phù hợp với nhiều phiên bản VS. Mình đang dùng phiên bản 2017

Nào bắt đầu thôi !

- Bạn có thể đọc bài hướng dẫn phía dưới hoặc xem luôn video.

Các bước đóng gói

Bước 1: Lấy file database

- Do project của chúng ta dùng SQL Server nên khi đóng gói cũng phải kèm theo database cùng (file .mdf.ldf).

- Để lấy được 2 file này bạn hãy làm như sau:

+ Mở SQL Server Management Studio → Chuột phải vào database của bạn Properties  Cửa sổ Database Properties hiện lên Chọn Files Copy đường dẫn Path (Đây chính là đường dẫn đến nơi chứa 2 file .mdf.ldf)

- Sau khi đi tới đường dẫn ta sẽ có thấy file database của chúng ta:

Có dạng TenDataBaseCuaBan.mdf và TenDataBaseCuaBan.ldf

Bước 2: Di chuyển file database đã lấy vào trong thư mục chứa project

- Dán 2 file .mdf và .ldf vào thư mục này.

- Sau khi dán vào rồi các bạn vẫn sẽ không thấy 2 file này xuất hiện trong Solution Explorer

- Các bạn nhấn vào biểu tượng này để hiện thị các file ẩn

- Sau đó chuột phải vào file .mdf Include In Project để đưa file này vào trong project của chúng ta.

Bước 3: Khai báo connectionString trong file App.config

- Copy đoạn code sau:

<connectionStrings>
    <add name="MyDB"
         connectionString ="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\PhatTrienUngDung.mdf;Integrated Security=True;User Instance=True"
         providerName="System.Data.SqlClient"
         />
</connectionStrings>

- Dán đoạn code trên vào trong cặp thẻ <configuration> </configuration> , kết quả sẽ như thế này:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup>
  <connectionStrings>
    <add name="MyDB"
         connectionString ="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\PhatTrienUngDung.mdf;Integrated Security=True;User Instance=True"
         providerName="System.Data.SqlClient"
         />
  </connectionStrings>
</configuration>

Lưu ý: Nhớ đổi tên PhatTrienUngDung.mdf là tên file mdf của bạn, các thông số của các cặp thẻ bạn không cần quan tâm mỗi project có thể sẽ khác nhau không sửa lại theo mình

Bước 4: Lấy chuỗi connectString

- Lấy chuỗi connectString chúng ta đã khai báo trong App.config để sử dụng trong file database

Ví dụ:

connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString;
connection = new SqlConnection(connectionString);

Lưu ý: Nếu bị báo lỗi đỏ ở System.Configuration.ConfigurationManager bạn cần phải thêm references của thư viện này bằng cách tìm ở Solution Explorer  References → Chuột phải → Add Reference... → Tìm kiếm Configuration → Tick chọn → Nhấn OK

Giải thích: thông thường chúng ta khi chúng ta khai báo connectionString các bạn thường gán cứng cho nó là đến ServerName trên máy chúng ta như này:​

Ứng dụng chỉ có thể chạy được trên máy của bạn thôi, giờ chúng ta khai báo chuỗi connectionString như trong App.config nó sẽ tự động khớp với từng máy khác nhau khi cài đặt ứng dụng của mình

Bước 5: Chạy thử.

Chạy thử ứng dụng xem có lỗi kết nối database gì khôngNếu có lỗi thì ...... dựa vào thông báo lỗi mà fix thôi.

- Tâm sự tí, mình đã mất gần nhiều giờ đồng hồ để sửa lỗi ở bước này chỉ vì đoạn chuỗi connectionString mình ghi thiếu phía sau "User Instance=True" 😭 

Bước cuối cùng: Tạo ra file .exe để cài đặt thôi.

- Ở Solution Explorer  Chuột phải vào project → Properties → Publish

- Ở phần Install Mode and Settings:

Ở ngoài desktop mình có tạo thư mục My-Product để lưu trữ file cài đặt .exe, nên ở đây mình chọn đường dẫn như này nhé:

Phần tiếp theo:​

+ Chọn Application Files : Ở đây sẽ hiển thị ra các data, thư viện mà ứng dụng của chúng ta sẽ xuất ra, trong đó các bạn phải tìm xem có file .mdf không, nếu không có thì kiểm tra lại Bước 2

+ Chọn Prerequisites: Ở phần này kiểu như là những cái bạn tick chọn là những yêu cầu cho người dùng khi cài đặt file .exe của bạn vậy, những cái tick chọn phải được cài đặt trong máy người dùng. Ở đây lúc tạo project mình cài framework 4.5 nên mình sẽ chọn framework 4.5SQL Server 2008

Nếu các bạn đã quên lúc tạo project mình dùng framework mấy thì có thể kiểm tra ở tab Application

+ Chọn Options:

Nó sẽ hiện ra bảng Publish options, ở tab  Description hãy điền thông tin ứng dụng của bạn vào

Product name: chính là tên của shortcuts của ứng dụng bạn luôn đấy !

Cài đặt theo mình nhé:​

Sau đó nhấn OK. 

Rồi ... Nút quyền lực nhất, nhấn vào Publish Now

Sau đó ...​ 

 Cài đặt file setup.exe thôi 🔥

Chạy ở máy khác

​Cái này khó nuốt nha. Để chạy được có thể bạn sẽ gặp nhiều lỗi cụ thể bạn đảm bảo những thứ như sau:

  • ​Máy đó có cài SQL Server cùng phiên bản với máy đã đóng gói
  • Đảm bảo máy đó có tên database trùng với máy đã đóng gói
  • v.v

Kết bài

- Với cách đóng gói này có thể phù hợp với nhiều phiên bản khác nhau so với các cách khác như sử dụng phần mềm thứ 3,...

- Như lúc đầu mình đã nói là project của mình có cài một thư viện và tới bước chạy file setup.exe vẫn bị lỗi...🙂 .

- Cụ thể do project của sử dụng 1 thư viện đó chính là FontAwesome, là thư viện thiết kế giao diện. Lỗi nguyên nhân là do thiếu một chữ ký số gì của thư viện .dll nên không cho phép cài đặt, có thể giống như bản quyền gì ấy. Sau đó đã tìm ra được cách giải quyết hết sức đơn giản là tải về cái gọi là StrongName của thư viện đó vào project thế là cài đặt được ngay.

- Thế nên nếu trong project của bạn có gặp lỗi tương tự mình thì ... fix tương tự nhé 👀