2012-06-19 9 views
5

है, यदि यह निर्धारित करना संभव है कि असेंबली ने किसी विशेष वर्ग का संदर्भ दिया है या नहीं। मैं वर्तमान में प्रतिबिंब का उपयोग कर रहा विधानसभाओं लोड करने के लिए और फिर मैं यह निर्धारित क्या सभाओं विधानसभा मैं लोड हो रहा हूँ के भीतर से उनका संदर्भ दिया जा:यह निर्धारित करना कि किसी वर्ग का संदर्भ सी #

foreach (var vReferencedAssembly in vSomeAssembly.GetReferencedAssemblies()) 

अब मुझे पता है कि क्या सभाओं संदर्भित करते हैं मैं उन vReferencedAssembly में खुदाई करने के लिए करना चाहते हैं और निर्धारित करता है, तो कुछ इस तरह होती है:

File.Create(vSomeFile); 

सरल अंग्रेज़ी में, मैं मेरे लिए आपूर्ति हो सकती है कि मैं क्या एक खतरा पर विचार सूची में से एक विधानसभा लोड करने के लिए नहीं करना चाहती। तो मैं उन चीजों को अवरुद्ध करना चाहूंगा जो फाइलों में हेरफेर कर सकते हैं और आगे।

+0

क्या यह एक आवश्यकता है कि यह गतिशील हो? यदि यह स्थैतिक था, तो आप संदर्भित असेंबली देखने के लिए डिस्सेबलर का उपयोग कर सकते हैं और यह क्या कह सकता है। – Josh

+0

मुझे लगता है कि यदि संभव हो तो मैं इसे गतिशील होने के लिए पसंद करूंगा। Disassembler का उपयोग करने के लिए सबसे अच्छा विकल्प हो सकता है। – Tada

उत्तर

2

मुझे विश्वास है कि आप जो खोज रहे हैं वह प्रतिबिंब केवल संदर्भ में असेंबली लोड करना है। यह आपको उन्हें एक सुरक्षित क्षेत्र में लोड करने की अनुमति देता है, जहां तक ​​उनका निरीक्षण नहीं किया जाता है, तब तक कोई कोड निष्पादित नहीं किया जाएगा।

देखें: http://msdn.microsoft.com/en-us/library/ms172331.aspx

अद्यतन: आप की तरह, चर, गुण, मानकों चीजों को देखने की प्रतिबिंब का उपयोग कर सकते, प्रकार लौट लेकिन है कि अभी भी आप दुर्भावनापूर्ण कोड है कि पूरी तरह से एक विधि अंदर निहित है का पता लगाने में मदद नहीं करेगा । यह मेरी समझ है कि सुरक्षित और असुरक्षित कोड के बीच अंतर सिस्टम प्रशासक को सबसे अच्छा छोड़ दिया जाता है। इन अनुप्रयोगों के पास पीसी पर एक सुरक्षित स्थान (ओं) के लिए एक अंतर्निहित ट्रस्ट रिलेशनशिप है। आईई: वैश्विक असेंबली कैश, वर्तमान कार्य निर्देशिका या आपके आवेदन द्वारा निर्धारित कुछ निश्चित पथ। पीसी तब प्रशासकों को इस स्थान पर असेंबली प्रबंधित करने की क्षमता प्रदान करता है।

अपडेट 2: आप इस संभावित असुरक्षित कोड को अपने स्वयं के एप्लिकेशन डोमेन में चलाने पर भी विचार कर सकते हैं। यहां आप सेट कर सकते हैं कि क्या अनुमति है और क्या नहीं है। http://msdn.microsoft.com/en-us/library/bb763046.aspx देखें।

अपडेट 3: जबकि मैं अभी भी यह सुनिश्चित करता हूं कि उचित अनुमतियों के साथ अपने स्वयं के एप्लिकेशन डोमेन में अविश्वसनीय कोड लोड करना सबसे साफ दृष्टिकोण है, यह निर्धारित करना संभव है कि इस question द्वारा पूछे जाने वाले रनटाइम पर आंतरिक रूप से कौन सी विधि संदर्भित हो। इसका अर्थ विधि (MethodBody.GetILAsByteArray) के कच्चे आईएल बाइट्स प्राप्त करने के लिए प्रतिबिंब का उपयोग करना है और आईएल पार्सर की अपनी पसंद के साथ इसका विश्लेषण करना है।

+0

मैं यह नहीं बता सकता कि यह वही है जो मैं ढूंढ रहा हूं। मैं यह निर्धारित करने के लिए असेंबली का निरीक्षण कैसे करूं कि एक विशिष्ट वर्ग का संदर्भ दिया गया है या कहा जाता है? उदाहरण के लिए: मुझे पता है mscorlib (mscorlib.dll) में फ़ाइल.क्रेट है, लेकिन इसका मतलब यह नहीं है कि असेंबली मैंने वास्तव में संदर्भों को लोड किया है फ़ाइल। बनाएं। मैं इसे कैसे निर्धारित कर सकता हूं? यदि बिलकुल .. – Tada

+0

ऐसा लगता है कि प्रतिबिंब विधियों के पैरामीटर या रिटर्न में उपयोग की जाने वाली कक्षाओं की पहचान कर सकता है, लेकिन यदि किसी विधि के वास्तविक निकाय के अंदर संदर्भित किया गया है तो मैं इसे नहीं ढूंढ पाएगा ... – Tada

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^