Можете ли вы создать версию своего приложения .NET 4 для тестирования — таков был невинный вопрос начальства. Конечно!
Но после того, как я изменил наши 27 проектов в нашем приложении Winforms на .NET 4 и перекомпилировал, при запуске приложения я получаю
System.TypeLoadException не было обработано
Message=Нарушены правила безопасности наследования при переопределении члена: '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
.
Но что тут может быть не так?? Погуглив, я нашел несколько дополнительных атрибутов для моего метода и пространства имен, поэтому я сделал:
[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
. - person leppie   schedule 31.01.2012GetObjectData
на самом деле не имеет смысла в абстрактном классе, поскольку вы никогда не сможете повторно создать его экземпляр (в экземпляр абстрактного типа). - person leppie   schedule 31.01.2012