Tôi đang hợp nhất một vài assembly .NET sử dụng ILMerge bao gồm một số assembly của bên thứ 3. Kể từ khi làm như vậy, tôi đã trải qua một số lỗi mà tất cả đun sôi xuống thực tế là định nghĩa loại được gắn liền với các hội đồng mà họ được xác định trong.Định nghĩa kiểu .NET trong các assembly được hợp nhất (ILMerge)
Một ví dụ đơn giản là định nghĩa cấu hình log4net trong App.config của tôi. Nó sử dụng type = "log4net.Config.Log4NetConfigurationSectionHandler, log4net" sẽ không hoạt động vì assembly log4net không tồn tại khi nó đã được sáp nhập vào assembly đã hợp nhất của tôi. Không phải là một việc lớn mặc dù, tôi thay đổi tên lắp ráp để lắp ráp hợp nhất của tôi và nó hoạt động tốt.
Ví dụ hơi phức tạp hơn là các loại xê-ri nhị phân. Hệ thống của tôi sử dụng serialization nhị phân để gửi các đối tượng nhất định giữa các quá trình. Tất cả các đối tượng serializable được định nghĩa trong một assembly chung mà tất cả các dự án khác tham chiếu. Tôi đã sử dụng serialization mặc định nhị phân, nhưng nó bắt đầu thất bại khi deserializing các đối tượng với lỗi nói rằng nó không thể tìm thấy hội nhập sáp nhập mà serialized đối tượng. Một lần nữa, không phải là một vấn đề lớn, tôi đã thực hiện một SerializationBinder tùy chỉnh tìm kiếm kiểu trong bất kỳ assembly được nạp nào, không chỉ là một assembly đã cho.
Ví dụ trước trở nên phức tạp hơn khi loại được tuần tự hóa tham chiếu các loại có thể tuần tự khác. Tôi đã tiếp tục gặp nhiều vấn đề ngày càng khó khăn hơn để giải quyết.
Điểm tôi đang cố gắng đạt được ở đây là hệ thống kiểu .NET và ILMerge dường như không chơi tốt với nhau. Có ai có bất kỳ kinh nghiệm với cách họ đã giải quyết vấn đề này? Có thể nói với thời gian chạy NET mà tôi không quan tâm những gì lắp ráp loại nói nó nên ở trong, chỉ cần tìm nó ở bất cứ đâu?
LƯU Ý: Vui lòng không trả lời hỏi tại sao tôi hợp nhất các hội đồng, đó không phải là điểm của câu hỏi này.
WAG: Đã thử DataContractSerializer chưa? Bạn sẽ không thể với NetDataContractSerializer vì nó bị ràng buộc với các kiểu, nhưng DCS cũ đơn giản sẽ làm việc cho bạn ... – Will