「メモ」(2008/10/16 (木) 16:55:02) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*C#で文字列からアセンブリを動的に生成する方法
#highlight(csharp){{using System;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.Reflection;
delegate int TestDelegate( int value );}}
が宣言済みとして,
#highlight(csharp){{{{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( "fooInstance.bar()=" + td.Invoke( 1 );}}}}
----
*C#で文字列からアセンブリを動的に生成する方法
#highlight(csharp){{using System;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.Reflection;
delegate int TestDelegate( int value );}}
が宣言済みとして,
#highlight(csharp){{{{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 );}}}}
----
表示オプション
横に並べて表示:
変化行の前後のみ表示: