Puede crear una versión .NET 4 de su aplicación para probar fue la inocente pregunta de los jefes, ¡seguro!System.TypeLoadException no se ha manejado/Se han violado las reglas de seguridad de herencia al anular el miembro
Pero después de cambiar nuestros 27 proyectos en nuestra aplicación Windows Forms a .NET 4 y recompilado, al poner en marcha la aplicación, me sale
System.TypeLoadException fue controlada
Mensaje = Herencia reglas de seguridad violadas al reemplazar el miembro: 'MyCustomORM.GetObjectData (System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)'. La accesibilidad de seguridad del método de anulación debe coincidir con la accesibilidad de seguridad del método que se está reemplazando.
Hmmm .....
MyCustomORM
en efecto implementar la interfaz ISerializable
y por lo tanto tiene este método
[Serializable]
public abstract class MyCustomORM: IMyCustomORM, ISerializable, ICloneable, ISecurable
{
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
// do stuff here.......
}
}
y también tengo dos clases que se derivan de Exception
que anulan la GetObjectData
método.
¿Pero qué podría estar mal aquí? Alrededor de google he encontrado algunos atributos adicionales para pegar en mi método y el espacio de nombres - por lo que hice:
[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.......
}
}
}
pero eso no cambia nada .....
La excepción ocurre incluso antes de mi primera línea de código en mi static Main()
método se alcanza ....
He peinado a través del proyecto y eliminado todas las referencias a las viejas bibliotecas de .NET 1.1 (sí, la aplicación es tan antigua .....) y las reemplacé con sus contrapartes de .NET 4 (principalmente log4net). Todavía sin suerte ....
¿Alguna idea?
Existe un 'indicador' para controlar este comportamiento. No recuerdo dónde. El error también indica que no puede usar 'virtual' allí. – leppie
Además, 'GetObjectData' realmente no tiene sentido en una clase abstracta, ya que nunca podría volver a crear una instancia (a una instancia de un tipo abstracto). – leppie