Dot-Net

Log4Net 和 .NET 4.0 RC

  • February 17, 2010

我嘗試使用 .NET 4.0 RC 編譯依賴於 Log4Net 日誌框架的項目,但遇到了一些問題。

開箱即用(只需將目標更改為 .NET 4.0),它不再起作用,引發安全異常。

覆蓋成員時違反了繼承安全規則:’log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)’。覆蓋方法的安全可訪問性必須與被覆蓋方法的安全可訪問性相匹配

這通過將以下行添加到 log4net 程序集(在 AssemblyInfo.cs 中)來解決:

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

有人可以解釋為什麼需要這樣做嗎?有沒有其他方法可以這樣做?這與 Log4Net 的編寫方式或其他有關嗎?

這是必需的,因為 .NET 4.0 添加了Level 2 Security-Transparent Code(這是新的預設設置)並取消了Code Access Security級別 1 安全透明程式碼仍然存在以實現兼容性,但正如您所發現的,必須指定。

你是對的,它與 Log4Net 的編寫方式有關。除了更新 Log4Net 程式碼或切換到不同的日誌記錄解決方案之外,您找到的解決方案確實沒有其他選擇:)

引用自:https://stackoverflow.com/questions/2279896