cadencii_jp @ wiki
メモ
最終更新:
boare
-
view
C#で文字列からアセンブリを動的に生成する方法
using System;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.Reflection;
delegate int TestDelegate( int value );
が宣言済みとして,
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters( new string[] {} );
parameters.GenerateInMemory = true;
string code = "";
code += "namespace a{";
code += " public class foo{";
code += " public static int bar( int value ){";
code += " return value * 10;";
code += " }";
code += " }";
code += "}";
CompilerResults results = provider.CompileAssemblyFromSource( parameters, code );
if ( results.Errors.Count != 0 ) {
for ( int i = 0; i < results.Errors.Count; i++ ) {
Console.WriteLine( " error=" + results.Errors[i].ErrorText );
}
throw new ApplicationException( "Errors.Count=" + results.Errors.Count );
}
Assembly testAssembly = results.CompiledAssembly;
Type fooType = testAssembly.GetType( "a.foo" );
MethodInfo mi = fooType.GetMethod( "bar" );
TestDelegate td = (TestDelegate)Delegate.CreateDelegate( typeof( TestDelegate ), mi );
Console.WriteLine( "td.Invoke( 1 )=" + td.Invoke( 1 );