C# 在运行时动态生成DLL程序集
目前我有一些动态生成的代码。换句话说,一个C#.cs文件是由程序动态创建的,目的是将这个C#文件包含在另一个项目中 挑战在于,我希望生成一个.DLL文件,而不是生成一个C#.cs文件,这样它就可以被任何类型的.NET应用程序(不仅仅是C#)引用,因此更有用C# 在运行时动态生成DLL程序集,c#,.net,dll,code-generation,C#,.net,Dll,Code Generation,目前我有一些动态生成的代码。换句话说,一个C#.cs文件是由程序动态创建的,目的是将这个C#文件包含在另一个项目中 挑战在于,我希望生成一个.DLL文件,而不是生成一个C#.cs文件,这样它就可以被任何类型的.NET应用程序(不仅仅是C#)引用,因此更有用 using System.CodeDom.Compiler; using System.Diagnostics; using Microsoft.CSharp; CSharpCodeProvider codeProvider = new 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);
改编自现在,你最好的选择是;4.0的计划包括“作为服务的编译器”,这将使其得到全面管理。这是一种不受欢迎的方式(如前所述,使用.NET 4.0):
主题的标题是“在运行时动态生成dll程序集”而不是“在运行时动态生成EXE程序集”。您的链接描述与在运行时创建EXE有关。@AminGhaderi谁说过EXE?如果你的意思是“但是MSDN上的代码示例创建了一个exe”,那么它也会很高兴地创建DLL;最终,如果使用
parameters.GenerateInMemory=true,则文件包不是程序集的有趣部分
您可以使用r.CompiledAssembly
获取内存中的程序集注意:此代码的旧版本有一行额外的代码,这些代码使用CSharpCodeProvider.CreateCompiler()从提供程序创建编译器。这是不推荐的,您应该直接在提供程序上调用compile。
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));
}
}