2009-09-14 17 views
6

पर डॉटनेट कोड को व्याख्या और/या प्राप्त करना एचटीएमएल में एम्बेडेड जावास्क्रिप्ट की छोटी बिट्स हो सकती हैं (उदा। onclick ईवेंट हैंडलर में परिभाषित)।रन-टाइम

  1. अगर मैं की तरह सी # एक DotNet भाषा, क्या प्रौद्योगिकियों या एपीआई मैं ऐसे जावास्क्रिप्ट टुकड़े को चलाने के लिए इस्तेमाल कर सकते हैं, यह देखते हुए कि मैं इसे चलाने के समय तक प्राप्त नहीं होता है इस्तेमाल करके एक HTML ब्राउज़र लिख रहे थे (और इसे प्राप्त स्ट्रिंग डेटा के रूप में, निष्पादन योग्य कोड के रूप में नहीं)?

  2. क्या कोड चलाने के लिए यह आसान या कठिन है जावास्क्रिप्ट के बजाय सी # स्निपेट थे?

  3. क्या ऐसी कोई तकनीक है जिसके लिए मेरे कोड को असामान्य निजीकरण की आवश्यकता नहीं है? उदाहरण के लिए, CodeCompiler.FromSource जैसी विधि SecurityPermissionFlag.UnmanagedCode की आवश्यकता है (जो मुझे अत्यधिक लगता है: मुझे नहीं लगता कि कोड को संकलित करना इतना जोखिम भरा क्यों है)।

  4. यदि मैंने सर्वर-साइड के साथ-साथ क्लाइंट-साइड कोड को नियंत्रित किया है, तो मैं क्लाइंट की बजाय सर्वर पर ऐसे स्क्रिप्ट टुकड़े संकलित करने पर विचार कर सकता हूं, और उसके बाद इसे क्लाइंट साइड पर प्रीकंपिल्ड कोड के रूप में भेज सकता हूं सज़ा पाएं। क्लाइंट को नेटवर्क पर ऐसे कोड (एक डॉटनेट असेंबली, संभवतः) भेजने का कोई तरीका है, क्लाइंट-साइड कोड क्लाइंट-साइड रैम में नेटवर्क से प्राप्त करता है, और इसे पर के बिना इसे संग्रहीत करता है क्लाइंट-साइड डिस्क ड्राइव पर एक फ़ाइल के रूप में?


संपादित

मैं पहले तीन प्रश्नों के उत्तर है: मैं अपने आप को इस तथ्य है कि संकलन उच्च विशेषाधिकार लेता है इस्तीफा दे दिया है। मैं नहीं देखता क्यों; हो सकता है (हालांकि मुझे यह एक बहुत ही विश्वसनीय कारण नहीं मिला है) ऐसा इसलिए है क्योंकि संकलक अप्रबंधित कोड का उपयोग करके लागू किया गया है। शायद यह "सी # संस्करण 5" समय सीमा में प्रबंधित कोड का उपयोग कर कंपाइलर को फिर से लागू करने पर बदल जाएगा। किसी भी मामले में, जो भी कारण है, ऐसा लगता है कि यह तरीका है, और कोई कार्य-आसपास नहीं है (अन्य समान एपीआई लेकिन जिनके लिए कम विशेषाधिकारों की आवश्यकता होती है)।

मेरा शेष प्रश्न यह है कि एक मशीन से दूसरे में एक असेंबली उदाहरण कैसे प्राप्त करें। जब मेरे पास समय होता है तो मुझे पता चल जाएगा कि अविश्वसनीय कोड Assembly.Load(byte[] rawAssembly) विधि चला सकता है या नहीं।

+2

क्या आपने पीडीसी '08 से एंडर्स आरईपीएल पाश डेमो देखा है। बस आने तक प्रतीक्षा करें और आप सेट हो जाएंगे :) --http: //channel9.msdn.com/pdc2008/TL16/ (यह अंत की ओर है) –

+0

तो आप क्लाइंट से .NET कोड की व्याख्या करना चाहते हैं, संकलित करें सर्वर पक्ष, फिर सीधे स्मृति से क्लाइंट पर निष्पादित करें? –

+0

मेरे पास कुछ क्लाइंट-सर्वर कोड पहले से चल रहा है। इसका उपयोग करके मैं क्लाइंट पर चलाने के लिए सर्वर से स्क्रिप्ट भेजना चाहता हूं। अगर उन स्क्रिप्ट को संकलित करने की आवश्यकता है, तो मुझे इस बात पर कोई फर्क नहीं पड़ता कि वे सर्वर पर या क्लाइंट पर संकलित हैं या नहीं। मैं क्लाइंट-साइड कोड का उपयोग करके ऐसा करना पसंद करूंगा जिसमें कम से कम निजीकृत हैं, उदा। "आंशिक ट्रस्ट/इंटरनेट जोन", जो मुझे क्लाइंट-साइड डिस्क आदि पर लिखने से रोकता है – ChrisW

उत्तर

2
  1. सर्वर पक्ष जावास्क्रिप्ट .NET प्लेटफ़ॉर्म द्वारा समर्थित भाषाओं में से एक है। मैंने दृश्य कोड में इसे कई बार इस्तेमाल किया जब आपको मौजूदा कोड में छोटे कोड स्निपेट डालने की आवश्यकता होती है। रनटाइम इसे डेटाबेस से संकलित किया जा सकता है और संकलित किया जा सकता है, इसलिए कोई प्रीफॉर्मेंस पेनल्टी नहीं है।

  2. नलसाजी कार्य (स्रोत को पुनर्प्राप्त करने, इसे संकलित करने आदि) बनाने के दृष्टिकोण से कोई फर्क नहीं पड़ता। मजबूती से टाइप की गई भाषाओं के साथ हालांकि एक संकलन योग्य संकलन इकाई में कोड स्निपेट को इकट्ठा करना अधिक कठिन होता है।

  3. अनुमतियां निश्चित रूप से एक चुनौती है। मैं आपके द्वारा उल्लिखित विशिष्ट अनुमति के बारे में निश्चित नहीं हूं, लेकिन सुरक्षा एक चिंता है, आपके द्वारा संकलित किए गए सभी स्रोत कुछ भी हो सकते हैं और यदि आप अपने कोड के स्रोत के बारे में सावधान नहीं हैं तो यह आपके सिस्टम में पिछला हो सकता है

  4. इसका उत्तर है - हाँ हां। आप कहीं से भी एक असेंबली लोड कर सकते हैं, फाइल से जरूरी नहीं, आप स्मृति में भी संकलित कर सकते हैं - यही वह है जो मैं करता हूं। इस मामले में कोई डीएलएल फाइल नहीं है।

+0

मेरी समस्या को सारांशित करने के लिए: यहां तक ​​कि JScriptCodeProvider इंस्टेंस को तुरंत चालू करने के लिए पूर्ण विश्वास की आवश्यकता होती है, इसलिए कम-ट्रस्ट क्लाइंट पक्ष पर संकलन अच्छा नहीं दिखता है। या यदि मैं सर्वर पर एक असेंबली इंस्टेंस बना/संकलित करता हूं, तो मैं इसे बाइनरीफॉर्मेटर का उपयोग करके क्रमबद्ध कर सकता हूं ... लेकिन फिर जब मैं इसे deserialize करने का प्रयास करता हूं तो मुझे एक अपवाद मिलता है ("System.IO.FileNotFoundException: फ़ाइल या असेंबली लोड नहीं हो सका ' Foo, संस्करण = 1.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = null 'या इसकी निर्भरताओं में से एक। सिस्टम निर्दिष्ट फ़ाइल नहीं ढूंढ सकता ") इसलिए मुझे नहीं पता कि सर्वर से क्लाइंट में असेंबली इंस्टेंस कैसे प्राप्त करें। – ChrisW

+0

आप इसे "deserialize" नहीं करते हैं। स्पष्ट रूप से नहीं। बस इसे अपने सर्वर पर इंगित यूआरएल दें और विधानसभा लोडर को नौकरी दें – mfeingold

1

आप कई प्रश्न पूछ रहे हैं, तो मैं आपको उनमें से एक पर विचार दूंगा। यहां एक बहुत अच्छा लेख और कुछ कोड नमूने हैं: http://www.west-wind.com/presentations/dynamicCode/DynamicCode.htm जो रनटाइम पर सी # कोड को संकलित और निष्पादित करने के बारे में बात करता है। मैंने इसे बहुत उपयोगी पाया और मैं इसे मानक सी # एप्लिकेशन में उपयोग कर रहा हूं। ऐसा लगता है कि यह आपकी समस्या के लिए भी उपयोगी होगा।