Frage

Zur Zeit habe ich einige Code, der dynamisch generiert wird. Mit anderen Worten, ein C # CS-Datei durch das Programm dynamisch erstellt, und die Absicht ist, diese C # Datei in einem anderen Projekt einzubeziehen.

Die Herausforderung besteht darin, dass ich mag eine DLL-Datei erzeugen, anstatt eine C # CS-Datei zu erzeugen, so dass es von jeder Art von .NET-Anwendung verwiesen werden konnte (nicht nur C #) und daher nützlich sein.

War es hilfreich?

Lösung

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

Angepasst von http://support.microsoft.com/kb/304655

Andere Tipps

Der nicht veraltet Art und Weise, es zu tun (.NET 4.0 wie schon in früheren Bewertungen erwähnt verwendet wird):

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

Im Moment ist Ihre beste Wette CSharpCodeProvider ; die Pläne für 4.0 enthalten „Compiler als Service“, die in diesem vollständig gemanagten machen wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top