CodeDom编译器C#版
本文关键字:编译器 CodeDom | 更新日期: 2023-09-27 18:24:15
我一直在尝试让CodeDom工作,这样我就可以在运行时为我的应用程序动态创建代码。然而,经过多次教程和试错,我遇到了一个似乎无法通过的问题。我不断地在看起来完全应该的代码上出现编译器错误。当我的代码中没有"''"时,我会得到"无法识别的转义序列"''"。
我得到的错误都在第1行。以下是它们的顺序:CS1009CS1056(连续3次)CS0116
这是我所拥有的:
正在编译的代码:
using System;
using System.Windows.Forms;
namespace sdjkfhj
{
public class Sample
{
public static void main()
{
MessageBox.Show("Working");
return;
}
}
}
编译器代码如下:
public void Compile(string file)
{
var prov = new Dictionary<string, string>();
prov.Add("CompilerVersion", "v2.0");
CSharpCodeProvider c = new CSharpCodeProvider();
ICodeCompiler comp = c.CreateCompiler();
CompilerParameters param = new CompilerParameters();
param.GenerateExecutable = true;
param.OutputAssembly = file + ".exe";
param.ReferencedAssemblies.Add("System.dll");
param.ReferencedAssemblies.Add("System.Windows.Forms.dll");
if (c.Supports(GeneratorSupport.EntryPointMethod))
param.MainClass = "Sample";
CompilerResults results = comp.CompileAssemblyFromSource(param, file);
if (results.Errors.Count > 0)
{
foreach (CompilerError CompErr in results.Errors)
{
MessageBox.Show("Line number " + CompErr.Line + ", Error Number: " + CompErr.ErrorNumber + ", '" + CompErr.ErrorText + ";" + Environment.NewLine + Environment.NewLine);
}
}
}
有没有什么事情我没有把它编译好?有没有我遗漏的东西?我在这里有点迷路了。提前谢谢。
我马上想到三件事:
- 您试图编译的代码中没有分号
- 如果Main应该是你的入口点,那么让它成为静态的
- 使源文件与目标文件不同(例如
param.OutputAssembly = file + ".exe";
修复这些问题实际上只是第一步,您还必须配置输出需要引用的程序集,在您使用的CompilerParameters上设置MainClass也不是一个坏主意。
MSDN 上的一个很好的例子