कोड को गतिशील रूप से संकलित करने और निष्पादित करने के कार्य को सरल बनाने के लिए मैंने एक पैकेज SharpByte.Dynamic लिखा है । कोड को विस्तार के तरीकों के रूप में किसी भी संदर्भ वस्तु पर लागू किया जा सकता है, जैसा कि आगे यहां विस्तृत है ।
उदाहरण के लिए,
someObject.Evaluate<int>("6 / {{{0}}}", 3))
रिटर्न 3;
someObject.Evaluate("this.ToString()"))
संदर्भ ऑब्जेक्ट का स्ट्रिंग प्रतिनिधित्व लौटाता है;
someObject.Execute(@
"Console.WriteLine(""Hello, world!"");
Console.WriteLine(""This demonstrates running a simple script"");
");
उन बयानों को एक स्क्रिप्ट के रूप में चलाता है, आदि।
एक्ज़ीक्यूटेबल्स को फैक्ट्री मेथड का उपयोग करके आसानी से प्राप्त किया जा सकता है, जैसा कि यहाँ उदाहरण में देखा गया है - और आपको किसी भी अपेक्षित नामित मापदंडों का स्रोत कोड और सूची है (टोकन {ब्रैकेट-नोटेशन, जैसे {{{0}} का उपयोग करके एम्बेड किया गया है) }, स्ट्रिंग के साथ टकराव से बचने के लिए ।फॉर्मैट () और साथ ही हैंडलबार्स-जैसे सिंटैक्स):
IExecutable executable = ExecutableFactory.Default.GetExecutable(executableType, sourceCode, parameterNames, addedNamespaces);
प्रत्येक निष्पादन योग्य वस्तु (स्क्रिप्ट या अभिव्यक्ति) थ्रेड-सुरक्षित है, संग्रहीत और पुन: उपयोग किया जा सकता है, स्क्रिप्ट के भीतर लॉगिंग का समर्थन करता है, समय की जानकारी संग्रहीत करता है और अंतिम अपवाद का सामना करना पड़ता है, आदि। अनुमति देने के लिए प्रत्येक पर एक प्रतिलिपि () विधि भी है सस्ती प्रतियां बनाना, यानी एक स्क्रिप्ट या अभिव्यक्ति से संकलित एक निष्पादन योग्य वस्तु का उपयोग करके दूसरों को बनाने के लिए टेम्पलेट के रूप में।
पहले से संकलित स्क्रिप्ट या कथन को निष्पादित करने का ओवरहेड अपेक्षाकृत कम है, साथ ही मामूली हार्डवेयर पर एक माइक्रोसेकंड के तहत, और पहले से संकलित स्क्रिप्ट और अभिव्यक्तियों को पुन: उपयोग के लिए कैश किया जाता है।