実行時にDLLアセンブリを動的に生成する
-
03-07-2019 - |
質問
現在、動的に生成されているコードがあります。つまり、C#.csファイルはプログラムによって動的に作成され、このC#ファイルを別のプロジェクトに含めることを意図しています。
課題は、C#.csファイルを生成するのではなく、.DLLファイルを生成して、あらゆる種類の.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));
}
}
今、最善の策は CSharpCodeProvider ; 4.0の計画には「サービスとしてのコンパイラ」が含まれており、これによりこれが完全に管理されます。
所属していません StackOverflow