यह लेख WPF C# एप्लिकेशन के भीतर एक बाहरी पाठ फ़ाइल से कोड निष्पादित करने की समस्या से निपटता है। पाठ फ़ाइल, जिसमें निष्पादित किया जाना था, एप्लिकेशन की निष्पादन निर्देशिका में रहता है।
कार्यान्वयनयह समाधान कोड संकलन और प्रतिबिंब तकनीकों के संयोजन का लाभ उठाता है। प्रक्रिया में पाठ फ़ाइल से कोड का वास्तविक समय संकलन और बाद में संकलित विधानसभा से लक्ष्य विधि का आह्वान और आह्वान शामिल है। निम्न कोड स्निपेट इस दृष्टिकोण को दिखाता है:
// ... कोड ... डिक्शनरी प्रदातापोटेशन = नया डिक्शनरी { {"कंपाइलरवर्जन", "v3.5"} }; CSHARPCODEPROVIDER प्रदाता = नया CSHARPCODEPROVIDER (ProviderOptions); CompilerParameters CompilerParams = new CompilerParameters { Gerateinmemory = true, GenerateExecutable = false }; COMPILERRESULTS परिणाम = Provider.compileassemblyFromSource (CompilerParams, Sourcecode); if (results.errors.count> 0) नया अपवाद फेंक दो ("संकलन विफल!"); ऑब्जेक्ट इंस्टेंस = results.compiledassembly.createinstance ("foo.bar"); // यह मानते हुए कि वर्ग को "फू" नामस्थान में "बार" नाम दिया गया है MethodInfo विधि = उदाहरण। gettype ()। getMethod ("Sayhello"); // यह मानते हुए कि विधि का नाम "Sayhello" है method.invoke (उदाहरण, null);
// ... code ...
Dictionary providerOptions = new Dictionary
{
{"CompilerVersion", "v3.5"}
};
CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions);
CompilerParameters compilerParams = new CompilerParameters
{
GenerateInMemory = true,
GenerateExecutable = false
};
CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, sourceCode);
if (results.Errors.Count > 0)
throw new Exception("Compilation failed!");
object instance = results.CompiledAssembly.CreateInstance("Foo.Bar"); // Assuming the class is named "Bar" in the "Foo" namespace
MethodInfo method = instance.GetType().GetMethod("SayHello"); // Assuming the method is named "SayHello"
method.Invoke(instance, null);
csharpcodeprovider निर्दिष्ट संकलक विकल्पों के साथ आरंभीकृत किया गया है। ] compileassemblyfromsource विधि तब संकलन करती है।
त्रुटि जाँच संकलन प्रक्रिया का अनुसरण करती है। यदि संकलन सफल है, तो संकलित वर्ग का एक उदाहरण createinstance का उपयोग करके बनाया गया है, और निर्दिष्ट विधि को
getMethod और
invoke का उपयोग करके आमंत्रित किया गया है। यह बाहरी रूप से लोड किए गए कोड के गतिशील निष्पादन के लिए अनुमति देता है। ध्यान दें कि नामस्थान और वर्ग/विधि नाम पाठ फ़ाइल में कोड से मेल खाना चाहिए। त्रुटि हैंडलिंग (जैसे, ट्राई-कैच ब्लॉक) को उत्पादन वातावरण में मजबूती के लिए जोड़ा जाना चाहिए।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3