2012-05-02 19 views
14

Tôi đã dành 2 giờ qua để xem xét các vấn đề này trên SO và không có gì có vẻ hoạt động.Tuy nhiên, một vấn đề khác về xung đột log4net 1.2.11

Tôi có giải pháp sử dụng log4net 1.2.11, thông qua NuGet. Nó hoạt động tốt trên máy trạm phát triển 32 bit của tôi đang chạy Windows 7. Nó không chạy trên hệ thống thử nghiệm Windows 2008 R2 64-bit của tôi. Các lỗi tôi nhận được là:

Unhandled Exception: System.IO.FileLoadException: Không thể tải tập tin hoặc lắp ráp 'log4net, Version = 1.2.11.0, Văn hóa = trung tính, PublicKeyToken = 669e0ddf0bb1aa2a' hoặc một trong các phụ thuộc của nó. Định nghĩa tệp kê khai của assembly được đặt không khớp với tham chiếu assembly.

Tôi đang tìm trong thư mục ứng dụng trên hệ thống thử nghiệm của mình. Tệp log4net.dll có phiên bản 1.2.11.

Phiên bản trong GAC là phiên bản 1.2.10. Tôi đã xóa nó. Đã có một phiên bản trên máy chủ phát triển của tôi mà lại là một cái gì đó khác; Tôi cũng loại bỏ nó. Tôi đã xây dựng lại; Tôi đã triển khai lại. Tôi đã thêm

<dependentAssembly> 
    <assemblyIdentity name="log4net" publicKeyToken="669E0DDF0BB1AA2A" culture="neutral"/> 
    <bindingRedirect oldVersion="0.0.0.0-1.2.10.0" newVersion="1.2.11.0"/> 
</dependentAssembly> 

vào tệp cấu hình của mình. Không có gì dường như tạo ra một chút khác biệt. Dự án triển khai của tôi cho thấy phiên bản đúng và chữ ký của hội đồng log4net đang được triển khai.

Tôi không biết mình có thể làm gì khác, nhưng tôi thấy khá thất vọng khi thư viện ghi nhật ký đang ngăn ứng dụng của tôi chạy.

Tôi đã bỏ lỡ điều gì?

Trả lời

4

Đây là giải pháp của tôi: Tôi đã thay đổi từ log4net thành Common.Logging thành NLog. Nó không tốn nhiều công sức, và tôi không nghĩ nó cần thiết, nhưng nó hoạt động tốt và hoạt động tốt.

+0

Tôi phải làm điều tương tự. Vấn đề là khi các phụ thuộc yêu cầu các phiên bản log4net xung đột. –

+3

Xem câu trả lời của @ keithl8041 về giải pháp thực tế cho vấn đề này thay vì làm việc xung quanh. :) –

+0

@JohnySkovdal, thực ra tôi cũng sẽ gọi đó là giải pháp thay thế. Điều đó có nghĩa là bạn phải tiếp tục sử dụng thư viện không dùng nữa và khóa thư viện cũ có EOL rõ ràng. Điều đó giới hạn các lựa chọn của bạn trong tương lai. –

3

Chúng tôi đang gặp vấn đề tương tự. Một sự phụ thuộc sâu trong cơ sở mã đang đặt 1.2.10 vào GAC và NuGet đang cố gắng sử dụng 1.2.11. Chúng tôi đã từ bỏ việc sử dụng NuGet cho log4net, quá nhiều đau đầu. Có vẻ như NuGet là một chút hoặc không có gì cả.

6

Tôi gặp sự cố này sau khi nâng cấp log4net thông qua NuGet, chỉ để thấy rằng phiên bản mới hơn đã được ký bằng một khóa khác. Thở dài. Đối với một số lý do này chỉ trở nên rõ ràng khi tôi triển khai đến máy chủ trực tiếp, nó đã không phát triển.

Bạn có thể lấy phiên bản 'oldkey' từ the apache log4net site. Chỉ cần nuke tham khảo của bạn từ tập tin dự án và tham khảo phiên bản oldkey thay thế.

3

Đôi khi bạn phải thực sự đi sâu vào các phụ thuộc của dự án. Trong trường hợp của tôi, nó là một tham chiếu của một tham chiếu đến dự án Service Stack thực tế đang tham chiếu một phiên bản khác của Log4Net.

Để khắc phục sự cố, tôi đã thêm phiên bản mới nhất của Log4Net từ nuget vào dự án ServiceStack. Tôi cũng đảm bảo rằng tham chiếu trực tiếp đã sử dụng phiên bản mới nhất và điều này giải quyết được vấn đề. Bạn có thể sử dụng công cụ phụ thuộc để nhanh chóng tìm thấy tham chiếu nào đang sử dụng các phiên bản xung đột, nhưng nếu bạn không có công cụ, bạn chỉ có thể biên dịch tham chiếu của dự án và xem phiên bản log4net.dll nào được sao chép vào thư mục.

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