2011-12-19 15 views
9

में गेट टाइप्स मैं इस के संभावित समाधान के लिए हर जगह देख रहा हूं लेकिन मुझे कोई जवाब नहीं मिल रहा है। मेरा मुद्दा यह है कि मेरे पास कुछ कक्षाएं हैं जिन्हें विधानसभा से पूरी तरह छिपाने की जरूरत है .getTypes, क्योंकि मैं एक आवेदन के लिए एक प्लगइन लिख रहा हूं, और यह उन प्रकारों को उठा रहा है जिन्हें मुझे छिपे रहने की जरूरत है (ऐसा तब भी होता है जब उन्हें घोषित किया जाता है निजी या आंतरिक कक्षाएं)।असेंबली में सूचीबद्ध होने से छिपाने के प्रकार। नेट

कोई भी जानता है कि या तो कौन सी असेंबली को बदलना है। गेटीस लौटता है, या एक, अफ्रीकी विशेषता जो उन प्रकारों को सूचीबद्ध होने से रोकती है?

+0

आप प्रतिबिंब से सामान छिपा नहीं सकते हैं, यह एक सुरक्षा तंत्र नहीं है। –

+0

@ बेनबॉबिन्सन: आप प्रतिबिंब से सामान छिपा नहीं सकते हैं, क्योंकि यह एक सुरक्षा तंत्र है। प्रकार मेटाडाटा का उपयोग स्टैक पैदल और अनुमति परीक्षण के दौरान किया जाता है। –

+0

क्षमा करें मुझे इसे वापस मिल गया है, मेरा मतलब था कि संरक्षित और आंतरिक जैसे सुरक्षा स्तर सुरक्षा तंत्र नहीं हैं। –

उत्तर

6

यह काफी हैक है और बहुत नाजुक है, लेकिन काम कर सकता है।

2 असेंबली बनाएं - एक प्लग-इन के लिए और दूसरे प्रकार के लिए दूसरा। दूसरा निर्देशिका में रखा जाएगा और आवश्यकता होने पर पहले गतिशील रूप से लोड किया जाएगा। (उदाहरण के लिए, Assembly.LoadFrom के माध्यम से।)

पहली असेंबली को प्लग-इन निर्देशिका में रखा जाएगा और केवल अपने प्रकार प्रकाशित करेगा। यह बहुत नाजुक है क्योंकि आपको दूसरी असेंबली के लिए पथ को हार्ड-कोड करना होगा और आप हटाए जाने या स्थानांतरित होने वाली फ़ाइल का जोखिम चला सकते हैं।

संपादित
@SLaks 'टिप्पणी इस समाधान की कमजोरी दूर ले जाता है। यदि आप दूसरी असेंबली को संसाधन के रूप में एम्बेड करते हैं और इसे रन-टाइम पर लोड करते हैं, तो Assembly.GetTypes पर कॉल करने वाले ऐप को उन प्रकारों को नहीं दिखाई देगा जिन्हें आप छिपाना चाहते हैं।

+3

आप एम्बेडेड संसाधन से दूसरी असेंबली लोड कर सकते हैं। – SLaks

+0

आह ... उस बारे में नहीं सोचा था। अच्छा विचार! –

+0

उत्कृष्ट विचार! सौभाग्य से मैं निर्देशिका एक मुद्दा नहीं है क्योंकि एप्लिकेशन उन निर्देशिकाओं को उजागर करता है जिन्हें मैं एक्सेस कर सकता हूं, लेकिन संसाधन विचार प्रतिभा है। –

2

यह संभव नहीं है।
क्षमा करें।

कोड जो Assembly.GetTypes() पर कॉल करता है, आमतौर पर केवल public प्रकारों के लिए फ़िल्टर करना चाहिए।

0

प्रबंधित कोड में आपका स्वागत है। .NET के प्रकार सत्यापनकर्ता के लिए पूर्ण प्रकार की जानकारी आवश्यक है। केवल मूल कोड .NET मेटाडेटा से छिपाया जा सकता है, और फिर आप शुद्ध MSIL द्वारा समर्थित पोर्टेबिलिटी और अनुमतियां छोड़ देते हैं।

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