एक ही रास्ता सुरक्षित रूप से करने के लिए:
संपादित
इसके अलावा, ऊपर परीक्षण के अलावा, यह सत्यापित करने के लिए उस प्रकार वैश्विक विधानसभा कैश से भरी हुई है चोट नहीं होगा जांचें कि कोई प्रकार असेंबली का हिस्सा है, असेंबली के पूर्ण योग्य नाम की जांच करना है जिसमें उसका नाम, संस्करण, संस्कृति और सार्वजनिक कुंजी (यदि हस्ताक्षरित है) शामिल है। सभी नेट नेट क्लास लाइब्रेरीज़ (बीसीएल) को माइक्रोसॉफ्ट द्वारा उनकी निजी कुंजी का उपयोग करके हस्ताक्षरित किया जाता है। यह बेस क्लास लाइब्रेरी के रूप में एक ही पूरी तरह से योग्य नाम के साथ असेंबली बनाने के लिए किसी और के लिए लगभग असंभव बनाता है।
//add more .Net BCL names as necessary
var systemNames = new HashSet<string>
{
"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
};
var isSystemType = systemNames.Contains(objToTest.GetType().Assembly.FullName);
एक थोड़ा कम भंगुर समाधान AssemblyName वर्ग का उपयोग करें और छोड़ संस्करण संख्या/संस्कृति की जांच करने के लिए है। यह निश्चित रूप से मानता है कि सार्वजनिक कुंजी संस्करणों के बीच नहीं बदलती है।
//add more .Net BCL names as necessary
var systemNames = new List<AssemblyName>
{
new AssemblyName ("mscorlib, Version=4.0.0.0, Culture=neutral, " +
"PublicKeyToken=b77a5c561934e089"),
new AssemblyName ("System.Core, Version=4.0.0.0, Culture=neutral, "+
"PublicKeyToken=b77a5c561934e089")
};
var obj = GetObjectToTest();
var objAN = new AssemblyName(obj.GetType().Assembly.FullName);
bool isSystemType = systemNames.Any(
n => n.Name == objAN.Name
&& n.GetPublicKeyToken().SequenceEqual(objAN.GetPublicKeyToken()));
अधिकांश बीसीएल पर एक ही कुंजी के साथ हस्ताक्षर किए गए हैं लेकिन सभी नहीं। आप सार्वजनिक कुंजी टोकन की जांच करने के लिए असेंबलीनाम क्लास का उपयोग कर सकते हैं। यह आपकी जरूरतों पर निर्भर करता है।
स्रोत
2010-07-04 23:42:13
आपको परवाह क्यों है? –