>>247 確かにおもしろそうなんだけど、ものすごくめんどくさいよ。(藁
とりあえず、簡単なサンプル出しとくね。
using System;
using System.CodeDOM;
using System.CodeDOM.Compiler;
using System.IO;
using System.Reflection;
class CodeDOMSample
{
// Hello World プログラムの定義。
public static CodeNamespace CreateCode() {
// using System; の部分。
CodeNamespace namespace1 = new CodeNamespace();
namespace1.Imports.Add(new CodeNamespaceImport("System"));
// class Hello の部分。
CodeClass class1 = new CodeClass("Hello");
class1.Attributes = TypeAttributes.NotPublic;
// public static void Main() の部分。
CodeMemberMethod method1 = new CodeMemberMethod();
method1.Name = "Main";
method1.Attributes = MemberAttributes.Public | MemberAttributes.Static;
// Console.WriteLine("Hello World!!"); の部分。
CodeStatement statement1 = new CodeMethodInvokeStatement(
new CodeTypeReferenceExpression("Console"),
"WriteLine",
new CodeExpression[] { new CodeLiteralExpression("\"Hello World!!\"") }
);
method1.Statements.Add(statement1);
class1.Members.Add(method1);
namespace1.Classes.Add(class1);
return namespace1;
}
public static void Main() {
CodeNamespace code = CreateCode();
ICodeGenerator generator;
TextWriter writer;
// C# のソースを生成。
generator = new CSharpCodeGenerator();
writer = new StreamWriter(File.OpenWrite("hello.cs"));
generator.GenerateCodeFromNamespace(writer, code);
writer.Close();
// VB のソースを生成。
generator = new VBCodeGenerator();
writer = new StreamWriter(File.OpenWrite("hello.vb"));
generator.GenerateCodeFromNamespace(writer, code);
writer.Close();
}
}