I am also playing around with System.CodeDom. What an awesome namespace! Using classes like System.CodeDom.CodeStatementCollection and System.CodeDom.Compiler.ICodeGenerator, you can actually generate both C# and VB.NET code on the fly. Take a look at this code to generate i = 10 in both languages:
using System; using System.CodeDom;
namespace CodeDomBaby { /// /// Summary description for Class1. /// class Class1 { /// /// The main entry point for the application. /// [STAThread] static void Main() { System.CodeDom.CodeStatementCollection statements = new CodeStatementCollection(); CodeVariableDeclarationStatement variable = new CodeVariableDeclarationStatement (System.Type.GetType("System.Int32"), "i", new CodePrimitiveExpression(10)); CodeVariableReferenceExpression variableRef =
new CodeVariableReferenceExpression("i"); statements.Add(variable); System.CodeDom.Compiler.CodeDomProvider provider; bool generateCSharp = true;
if (generateCSharp) provider = new Microsoft.CSharp.CSharpCodeProvider(); else provider = new Microsoft.VisualBasic.VBCodeProvider();
System.CodeDom.Compiler.ICodeGenerator generator = provider.CreateGenerator();
foreach (CodeStatement s in statements) generator.GenerateCodeFromStatement(s, Console.Out,
new System.CodeDom.Compiler.CodeGeneratorOptions());
} } }
9:28:37 PM
|