2011-06-13 9 views
7

मैं स्ट्रीम या बाइट सरणी का उपयोग कर रनटाइम पर एक असेंबली लोड करना चाहता हूं।WP7 में स्ट्रीम या बाइट [] से असेंबली कैसे लोड करें?

.net में आप Assembly.Load(Byte[], Byte[])http://msdn.microsoft.com/en-us/library/twt16z2x.aspx

उपयोग कर सकते हैं मानक सिल्वरलाइट में आप AssemblyPart.Load()http://msdn.microsoft.com/en-us/library/cc190521%28v=VS.96%29.aspx

का उपयोग लेकिन विंडोज फोन में कर सकते हैं 7 न के इन तरीकों उपलब्ध हैं।

उत्तर

10

ठीक है, जैसा कि आपने बहुत अधिक खोजा है; आप यह नहीं कर सकते डिज़ाइन आपको एक ऐसी असेंबली लोड करने की अनुमति नहीं देता है जो आपके एक्सएपी में शिप नहीं करता है। यह एक सुरक्षा डिज़ाइन है, क्योंकि वे नहीं चाहते हैं कि आप मनमाने ढंग से कोड डाउनलोड कर रहे हों और चला रहे हों जो मार्केटप्लेस निरीक्षण पास नहीं कर पाता है।

यह इस बात पर आधारित है कि ऐप्पल अपने ऐप स्टोर को कैसे नियंत्रित करता है। यह कार्यक्षमता क्यों नहीं है, और मुझे शक क्यों है कि इसे जोड़ा जाएगा:

  1. बाज़ार। माइक्रोसॉफ्ट के लिए आवश्यक है कि सभी एप्लिकेशन ब्लैकबॉक्स निरीक्षण पास करें। वे संभवतः कई चीजों की तलाश करते हैं, जैसे प्रदर्शन, प्रमुख बग, रिस्क सामग्री, और यूआई स्थिरता। किसी भी असेंबली को लोड करने और चलाने के लिए डेवलपर को अनुमति देना पूरी तरह से बाज़ार को रोकता है। इससे उपयोगकर्ता को कुछ तरीकों से दर्द होता है। पहला यह है कि एक डेवलपर इसे मार्केटप्लेस के बाहर अपडेट वितरित करने, या सुविधाओं (जैसे अश्लील) में घुसपैठ करने के साधन के रूप में उपयोग करने का लुत्फ उठाएगा, जो माइक्रोसॉफ्ट अपने मार्केटप्लेस पर अनुमति नहीं देता है।
  2. सुरक्षा। एक असेंबली लोड करने में सक्षम होने के नाते एक शक्तिशाली विशेषता है, जो कि दोनों अच्छे और बुरे हो सकते हैं। यदि एक डेवलपर ने इसे गलत तरीके से कार्यान्वित किया है, तो इसका फायदा उठाना संभव हो सकता है। दूसरा, यह माइक्रोसॉफ्ट पर तकनीकी सीमा (या समय सीमा) हो सकता है कि यह ऐप्स के सैंडबॉक्सिंग को कैसे प्रभावित करेगा। या इससे भी बदतर, एक प्रतीत होता है कि हानिकारक एप्लिकेशन पहले से ही निरीक्षण पारित करने के बाद एक अलग असेंबली डाउनलोड करता है, फिर कुछ घृणित करना शुरू करता है; कुंजी लॉगिंग की तरह और इसे कहीं भी अपलोड करना। चूंकि यह बाज़ार के आसपास चला गया, माइक्रोसॉफ्ट जनता के सामने जाने से पहले कभी इसे पकड़ने में सक्षम नहीं था।

आप क्या कर सकते हैं, के रूप में OJ टिप्पणी में सुझाव दिया, अपने XAP के हिस्से के रूप विधानसभाओं बनाने के लिए, और Assembly.Load भार के कि आप नाम से इसे लोड करने की अनुमति से एक का उपयोग है। आप गतिशील रूप से असेंबली लोड कर सकते हैं, उन्हें बस आपके एक्सएपी का हिस्सा बनना होगा।

+1

सोचें कि आपका उत्तर सही है। लेकिन यह उस कार्यक्षमता को हटाने के लिए शॉर्ट्ससाइट है। ऐसे कई मामले हैं जहां लोग एक एम्बेडेड संसाधन के रूप में असेंबली जहाज भेजना चाहते हैं और फिर लोड करने के लिए रन-टाइम पर चुनें और चुनें। – Simon

+0

बस उन्हें एक असेंबली में एम्बेड किए बिना एक्सएपी में सभी को शिप करें और आवश्यकता होने पर उन्हें लोड करें। –

+3

@ सिमॉन हां मैं सहमत हूं, लेकिन मुझे लगता है कि आखिरकार माइक्रोसॉफ्ट के लिए यह सही निर्णय था। उस तरह की कार्यक्षमता से जुड़े बहुत से नकारात्मक (अंतिम उपयोगकर्ताओं के लिए) हैं। – vcsjones