Bạn có thể tạo phiên bản .NET 4 của ứng dụng để thử nghiệm là câu hỏi vô tội của ông chủ - chắc chắn!System.TypeLoadException không được xử lý/Quy tắc bảo mật thừa kế vi phạm trong khi ghi đè thành viên
Nhưng sau khi tôi đã thay đổi 27 dự án của chúng tôi trong ứng dụng Winforms của chúng tôi để NET 4, và biên dịch lại, khi khởi chạy ứng dụng, tôi nhận được
System.TypeLoadException là unhandled
nhắn = Inheritance các quy tắc bảo mật bị vi phạm trong khi ghi đè thành viên: 'MyCustomORM.GetObjectData (System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)'. Khả năng truy cập bảo mật của phương thức ghi đè phải phù hợp với khả năng truy cập bảo mật của phương thức được ghi đè.
Hmmm .....
MyCustomORM
không thực sự thực hiện các giao diện ISerializable
và do đó có phương pháp này
[Serializable]
public abstract class MyCustomORM: IMyCustomORM, ISerializable, ICloneable, ISecurable
{
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
// do stuff here.......
}
}
và tôi cũng có hai lớp học có nguồn gốc từ Exception
đó ghi đè lên GetObjectData
phương pháp.
Nhưng điều gì có thể sai ở đây ?? Googling xung quanh tôi tìm thấy một số thuộc tính bổ sung để dính vào phương pháp và không gian tên của tôi - vì vậy tôi đã làm:
[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.......
}
}
}
nhưng điều đó không thay đổi bất cứ điều gì .....
Trường hợp ngoại lệ xảy ra ngay cả trước khi dòng đầu tiên của tôi mã số trong phương pháp static Main()
của tôi đã đạt được ....
Tôi đã lược thông qua dự án và xóa mọi tham chiếu tới thư viện .NET 1.1 cũ (có, ứng dụng cũ .....) và thay thế chúng với các đối tác .NET 4 của họ (chủ yếu là log4net). Vẫn không có may mắn ....
Bất kỳ ý tưởng nào ??
Có 'cờ' để kiểm soát hành vi này. Không thể nhớ nơi mặc dù. Lỗi này cũng chỉ ra rằng bạn không thể sử dụng 'virtual' ở đó. – leppie
Ngoài ra, 'GetObjectData' không thực sự có ý nghĩa trong một lớp trừu tượng, vì bạn sẽ không bao giờ có thể tái tạo nó (cho một thể hiện của một kiểu trừu tượng). – leppie