2011-09-13 34 views
9

Tôi có 4 dll. Nhưng tôi muốn có 1 dll đơn sẽ chứa mã từ tất cả 4 trong số các dll này. Tôi đã cố gắng để thêm một dự án và sao chép dán tất cả các mã hiện tại của tôi vào một dự án, nhưng tôi không thể.Làm thế nào để kết hợp 2 hoặc nhiều C# hội đồng thành 1 thư viện?

+0

Thêm chúng như là một tài nguyên, sử dụng Solution Explorer, mở thuộc tính dự án và thêm các assembly được yêu cầu lại Tài nguyên nhị phân –

+0

Tôi đã tạo thư viện lớp (các hộp thoại chung). Nhưng tôi đã tìm thấy một số trong số chúng, nhưng chúng cũng nằm trong dự án thư viện lớp. Tôi đã thêm chúng làm dự án hiện tại vào thư viện lớp của tôi. sử dụng chúng tôi phải thêm từng tham chiếu – Javidan

+0

Thêm các tham chiếu vào các tệp DLL này vào dự án, nhưng trong phần Hội đồng được tinh chỉnh của dự án, trỏ vào chúng và chọn trong Trình chỉnh sửa thuộc tính cho các hội đồng tham chiếu "Sao chép cục bộ: Sai, Kiểu nhúng: Sai", sau đó chỉ cần tải em như bình thường, từ tài nguyên nhúng trong phần Ứng dụng ngay trước khi gọi phương thức Application.Run(), trong đó các assembly được tham chiếu bởi assembly chính của bạn, Dù sao, bạn có thể tham khảo các assembly trong dự án trong thời gian thiết kế và không sao chép chúng vào lắp ráp thư mục đầu ra, thay vào đó, lưu trữ như là một nguồn lực trong một tải lắp ráp khi lắp ráp lưu trữ này tham chiếu đến –

Trả lời

11

Có một cái nhìn vào ILMerge

ILMerge là một tiện ích cho việc sáp nhập nhiều cụm NET thành một hội đồng NET duy nhất.

+0

làm thế nào để sử dụng nó? – Javidan

+0

@Javidan Tại sao bạn không muốn chỉ nhúng dll của bạn như là một nguồn lực trong một dll? Bạn sẽ không cần phải chạm vào hội đồng, bởi vì họ có thể được ký kết, và yêu cầu từ chức hội đồng kết quả sau khi hợp nhất ở cấp IL. –

+0

Tôi không biết phải làm gì. Tôi đã cài đặt ilmerge, nhưng không thể sử dụng.Và không biết đó là phương pháp thoải mái và an toàn để kết hợp. – Javidan

6

Bạn có thể sử dụng ILMerge tiện ích

Hoặc bạn có thể embed the dlls you want to merge as resources

Ở đây mẫu mã:

AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { 
    using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) 
    { 
     Byte[] assemblyData = new Byte[stream.Length]; 
     stream.Read(assemblyData, 0, assemblyData.Length); 
     return Assembly.Load(assemblyData); 
    } 
}; 
+0

Liên kết trong một bài đăng. –

+0

Tôi đã luôn luôn có vô số vấn đề đang cố gắng tải các tệp DLL nhúng ... đã được một thời gian, nhưng IIRC vấn đề tôi gặp phải, ngay cả với 'Load (byte [])' hội đồng đã được thử tải từ đĩa. –

+0

@pst Không có vấn đề với việc tải các assembly, vì bạn có thể tải nó trong miền ứng dụng riêng của nó, và kiểm soát truy cập và phiên bản thủ công trên nó. Và có, hội đồng trong khi nạp trong miền ứng dụng, không thể được tải lại từ đĩa hoặc viết lại bởi một hội đồng khác, đã được nạp trong bộ nhớ. Đó là do thiết kế. –

Các vấn đề liên quan