Generación de ensamblado de DLL dinámicamente en tiempo de ejecución

Actualmente tengo un código que se genera dinámicamente. En otras palabras, el progtwig crea dinámicamente un archivo .cs de C #, y la intención es incluir este archivo C # en otro proyecto.

El desafío es que me gustaría generar un archivo .DLL en lugar de generar un archivo C # .cs para que pueda ser referenciado por cualquier tipo de aplicación .NET (no solo C #) y, por lo tanto, sea más útil.

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); 

Adaptado de http://support.microsoft.com/kb/304655

La forma no obsoleta de hacerlo (usando .NET 4.0 como se mencionó en los carteles anteriores):

 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)); } } 

En este momento, su mejor apuesta es CSharpCodeProvider ; los planes para 4.0 incluyen “comstackdor como servicio”, lo que hará que esto se gestione por completo.