문제

현재 동적으로 생성되는 코드가 있습니다. 다시 말해, C# .CS 파일은 프로그램에 의해 동적으로 생성되며,이 C# 파일을 다른 프로젝트에 포함시키는 것입니다.

문제는 C# .cs 파일을 생성하는 대신 .dll 파일을 생성하여 모든 종류의 .NET 응용 프로그램 (C#뿐만 아니라)에서 참조 할 수 있도록 더 유용하다는 것입니다.

도움이 되었습니까?

해결책

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

적응 http://support.microsoft.com/kb/304655

다른 팁

비대화되지 않은이를 수행하는 방법 (이전 포스터와 같이 .NET 4.0 사용) :

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

지금은 최선의 방법입니다 csharpcodeprovider; 4.0에 대한 계획에는 "서비스로 컴파일러"가 포함되어있어이를 완전히 관리 할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top