توليد التجمع DLL بشكل حيوي في وقت التشغيل
-
03-07-2019 - |
سؤال
وحاليا لدي بعض التعليمات البرمجية التي يتم إنشاؤها بشكل حيوي. وبعبارة أخرى، يتم إنشاء ملف C # .cs حيوي من قبل البرنامج، والقصد من ذلك هو أن يدرج هذا الملف # C في مشروع آخر.
والتحدي هو أن وأود أن إنشاء ملف. DLL بدلا من توليد ملف C # .cs بحيث يمكن الرجوع إليها من قبل أي نوع من التطبيق. NET (وليس فقط C #)، وبالتالي يكون أكثر فائدة.
المحلول
using System.CodeDom.Compiler;
using System.Diagnostics;
using Microsoft.CSharp;
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
ICodeCompiler icc = codeProvider.CreateCompiler();
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = false;
parameters.OutputAssembly = "AutoGen.dll";
CompilerResults results = icc.CompileAssemblyFromSource(parameters, yourCodeAsString);
نصائح أخرى
والطريقة غير إهمال للقيام بذلك (باستخدام NET 4.0 كما ذكرت الملصقات السابقة):
using System.CodeDom.Compiler;
using System.Reflection;
using System;
public class J
{
public static void Main()
{
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = false;
parameters.OutputAssembly = "AutoGen.dll";
CompilerResults r = CodeDomProvider.CreateProvider("CSharp").CompileAssemblyFromSource(parameters, "public class B {public static int k=7;}");
//verify generation
Console.WriteLine(Assembly.LoadFrom("AutoGen.dll").GetType("B").GetField("k").GetValue(null));
}
}
لا تنتمي إلى StackOverflow