परीक्षण करने के लिए आप अपने ऐप का .NET 4 संस्करण बना सकते हैं, मालिकों का निर्दोष प्रश्न - निश्चित रूप से!System.TypeLoadException को अनचाहे किया गया था/विरासत सुरक्षा नियमों का उल्लंघन किया गया था जबकि सदस्य
लेकिन उसके बाद मैं नेट 4 के लिए हमारी Winforms आवेदन में हमारे 27 परियोजनाओं बदल गया है, और फिर कंपाइल, जब एप्लिकेशन को लॉन्च करने, मैं
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) के साथ। अभी भी कोई भाग्य नहीं ....
कोई विचार ??
इस व्यवहार को नियंत्रित करने के लिए 'ध्वज' है। हालांकि याद नहीं कर सकते हैं। त्रुटि यह भी इंगित करती है कि आप वहां 'आभासी' का उपयोग नहीं कर सकते हैं। – leppie
इसके अलावा, 'GetObjectData' वास्तव में एक अमूर्त वर्ग में समझ में नहीं आता है, क्योंकि आप कभी भी इसे फिर से चालू नहीं कर पाएंगे (एक सार प्रकार के उदाहरण के लिए)। – leppie