2010-02-17 30 views
27

Tôi đã cố gắng biên dịch một dự án phụ thuộc vào khung đăng nhập Log4Net sử dụng .NET 4.0 RC và chạy vào một số vấn đề.Log4Net và .NET 4.0 RC

Hết hộp (chỉ thay đổi mục tiêu thành .NET 4.0), nó không còn hoạt động nữa, ngoại lệ bảo mật được ném.

quy tắc an ninh Inheritance vi phạm trong khi trọng thành viên: 'log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData (System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)'. an ninh năng tiếp cận của các phương pháp trọng phải phù hợp với khả năng tiếp cận an ninh của phương pháp là

này đã được giải quyết bằng cách thêm dòng sau vào lắp ráp log4net (trong AssemblyInfo.cs):

[assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)] 

Ai đó có thể giải thích tại sao điều này là bắt buộc và có lựa chọn thay thế để thực hiện theo cách này không? Điều này liên quan đến cách Log4Net được viết hay cái gì khác?

Trả lời

22

Điều này là bắt buộc vì .NET 4.0 đã thêm Level 2 Security-Transparent Code (là mặc định mới) và đã bỏ đi với Code Access Security. Level 1 Security-Transparent Code vẫn ở đó để tương thích nhưng, như bạn đã tìm thấy, phải được chỉ định.

Bạn chính xác rằng nó liên quan đến cách Log4Net được viết. Thực sự không có giải pháp thay thế cho giải pháp bạn tìm thấy ngoài việc cập nhật mã Log4Net - hoặc chuyển sang giải pháp ghi nhật ký khác :)