2011-11-10 23 views
70

Tôi sử dụng gói dịch vụ của mình bằng cách sử dụng dự án EXE (nhiệm vụ khởi động cho ứng dụng azure) trong đó tôi đã sao chép DLL sau đây của một số DLL của & vào một dự án EXE.Làm thế nào để hợp nhất nhiều hội đồng thành một?

dlls

Khi tôi xây dựng dự án EXE này sau đó DLL Azure sẽ được đi kèm với EXE của tôi, nhưng DLL dịch vụ ngăn xếp sẽ không được đi kèm với EXE, vì để chạy EXE của tôi trên bất kỳ máy tôi cần phải sao chép tất cả các dịch vụ ngăn xếp của DLL bằng tay.

Tôi đã sử dụng dịch vụ này dll ngăn xếp để sử dụng

JsonServiceClient client = new JsonServiceClient(servicepath); 

tôi nên phải làm gì để đóng gói tất cả các DLL để EXE của tôi?

Trả lời

95

Bạn có một vài lựa chọn:

HOẶC

  • sử dụng một số công cụ như SmartAssembly (thương mại)
    nó có thể nhúng và hợp nhất trong số những thứ khác (không cần phải thay đổi mã nguồn của bạn)

HOẶC

  • code that yourself in less than 10 lines (thay đổi mã nguồn miễn phí nhưng tối thiểu)
    đánh dấu tất cả các phụ thuộc cần thiết là "tài nguyên được nhúng e" - theo cách này họ có trong tập tin EXE ... bạn cần phải thiết lập một handler AssemblyResolve mà khi chạy lần đọc từ tài nguyên và trả về DLL cần thiết để bộ thực thi .NET ...
+3

Cảm ơn bạn đã nhắc tôi về giải pháp nhúng của Jeffrey Richter! Xem câu trả lời của tôi đề cập đến [Costura] (https://github.com/Fody/Costura/) cho một công cụ kết hợp điều này với việc tiêm mã cần thiết. – CodeFox

26

Công cụ bạn đang tìm kiếm được gọi là ILMerge. Nó là một công cụ dòng lệnh và có thể được sử dụng như thế này:

ilmerge /target:winexe /out:MyApp.exe 
     MyExe.exe ServiceStack.dll ServiceStack.Interfaces.dll ServiceStack.ServiceInterface.dll ServiceStack.Text.dll 

Ngoài ra còn có một bài báo mô tả làm thế nào để bao gồm ILMerge vào thiết lập dự án VS của bạn here

+0

Xin chào, tôi có thể thêm tài nguyên bên ngoài (tệp/hình ảnh) vào thực thi được không? –

6

Hãy thử ILMerge-GUI, the .NET merger. Đó là một GUI dựa trên Ilmerge để tránh tất cả các công việc dòng lệnh.

+2

Tuyệt vời! Làm việc tuyệt vời cho tôi! –

+1

Codeplex đang tắt, do đó, đây là liên kết dự án đã di chuyển: https://bitbucket.org/wvd-vegt/ilmergegui – Hegi

2

Thanh toán dự án ServiceStack.Gap hiển thị một số ví dụ về cách ILMerge ServiceStack vào một nền tảng duy nhất .exe.

ServiceStack cũng bao gồm một số tính năng khác đó là đặc biệt rất thích hợp cho các ứng dụng tạo ra nhúng nơi nó:

  • Cho phép các dịch vụ của bạn sẽ được tự lưu trữ sử dụng.HTTP Listener NET của
  • Hỗ trợ pre-biên soạn Razor Xem
  • Tài nguyên Hỗ trợ nhúng
  • Hỗ trợ cơ sở dữ liệu nhúng trong SQLite và OrmLite
  • Có thể ILMerged thành một đơn .exe
19

Một công cụ tuyệt vời để bao gồm các hội đồng được tham chiếu dưới dạng tài nguyên được nhúng là Costura (một số Fody bổ trợ). Tác giả Simon Kropp mô tả nó như sau:

[...] sự kết hợp của hai phương pháp:

Kết quả là một giải pháp cực kỳ đơn giản chỉ yêu cầu lấy Costura.Fody từ NuGet.

Các tính năng:

  • Bao gồm biểu tượng gỡ lỗi
  • Nén hội nhúng
  • Bao gồm/không bao gồm lắp ráp cụ thể
  • Khác (xem Readme)
+7

OMG Costura.Fody là câu trả lời đúng. Cài đặt gói từ nuget, xây dựng lại dự án và bây giờ tôi có một EXE AWESOME độc lập !! –

+3

Tôi không thể tin được nó dễ đến mức nào. Chỉ cần cài đặt các gói từ nuget và bạn đã hoàn tất. – iraSenthil

+1

Tôi cũng đang sử dụng Costura.Fody. Đó là tầm thường để thiết lập và chết dễ dàng để bao gồm các gói NuGet như tài nguyên. Nhận dự án. –

2

Nếu bạn có WPF phụ thuộc của bạn các tùy chọn có thể hạn chế hơn ..... ILMerge không xuất hiện để đối phó với những điều này. Costura.Fody (như đã đề cập bởi Codefox ở trên) làm việc hoàn hảo cho chúng tôi tuy nhiên và mất khoảng 5 phút để có được đi ... một kinh nghiệm rất tốt.

Cài đặt bằng Nuget (chọn dự án mặc định chính xác trong Bảng điều khiển trình quản lý gói).

Nó kết hợp tất cả các tệp DLL được đánh dấu "Sao chép địa phương" = true và tạo một .EXE đã hợp nhất (cùng với đầu ra tiêu chuẩn, hầu hết trong số đó hiện không cần thiết) cũng được nén. Điều này sau đó có thể được sử dụng độc lập.

Giấy phép là MIT để bạn có thể sửa đổi/phân phối theo yêu cầu.

https://github.com/Fody/Costura/