Можете ли вы создать .NET 4 версию вашего приложения для тестирования - был невинный вопрос начальства - конечно!
Но после того, как я изменил 27 проектов в нашем Winforms-приложении на .NET 4 и перекомпилировал, при запуске приложения я получаю
System.TypeLoadException was unhandled
. Message=Inheritance security rules violated while overriding member: 'MyCustomORM.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)'. Доступность безопасности переопределяемого метода должна соответствовать доступности безопасности переопределяемого метода.
Hmmm.....
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.......
}
}
}
но это ничего не меняет.....
Исключение происходит еще до того, как первая строка кода в моем статическом методе Main()
достигает....
Я прочесал проект и удалил все ссылки на старые библиотеки .NET 1.1 (да, приложение настолько старое.....) и заменил их аналогами из .NET 4 (в основном log4net). По-прежнему безуспешно....
Есть идеи???