您可以創建一個.NET 4版本的應用程序進行測試是老闆的無辜問題 - 當然!System.TypeLoadException未處理/覆蓋成員時違反繼承安全規則
但之後我改變了我們的27個項目在我們的WinForms應用程序到.NET 4,並重新編譯,啓動應用程序時,我得到
System.TypeLoadException了未處理
消息= 繼承在覆蓋成員時違反安全規則: 'MyCustomORM.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)'。 重寫方法的安全性可訪問性必須與被重寫的方法的安全性可訪問性相匹配。
嗯.....
MyCustomORM
確實實現ISerializable
接口,因而具有這種方法
[Serializable]
public abstract class MyCustomORM: IMyCustomORM, ISerializable, ICloneable, ISecurable
{
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
// do stuff here.......
}
}
我也有兩班,從Exception
推導覆蓋GetObjectData
方法。
但是,這裏可能有什麼錯?周圍的Googling我找到了一些附加的屬性,堅持到我的方法和命名空間 - 所以我做:
[assembly: SecurityPermission(SecurityAction.RequestMinimum, Execution = true)]
namespace MyApplication.ORM
{
[Serializable]
public abstract class MyCustomORM: IMyCustomORM, ISerializable, ICloneable, ISecurable
{
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
// do stuff here.......
}
}
}
但是,這並不能改變什麼.....
異常甚至發生在我的第一行之前在我的static Main()
方法代碼達到....
我已經通過這個項目梳理,除去老.NET 1.1庫的引用(是的,應用程序是老.....)和替換它們與他們的.NET 4對應(主要是log4net)。仍然沒有運氣....
任何想法??
有一個「標誌」來控制這種行爲。雖然不記得在哪裏。這個錯誤還表明你不能在那裏使用'virtual'。 – leppie 2012-01-31 11:44:11
另外,'GetObjectData'在抽象類中並沒有什麼意義,因爲你永遠無法重新實例化它(抽象類型的一個實例)。 – leppie 2012-01-31 11:45:38