C# C语言的CodeDom编译器#
我一直在尝试让CodeDom工作,以便在运行时为我的应用程序动态创建代码。然而,经过许多教程和反复试验,我遇到了一个似乎无法通过的问题。我不断地在代码上遇到编译器错误,这些代码看起来和应该的完全一样。当代码中没有“\”时,我会得到“无法识别的转义序列“\” 我得到的错误都在第1行。按顺序排列如下: CS1009 CS1056(连续3次) CS0116 以下是我所拥有的: 正在编译的代码:C# C语言的CodeDom编译器#,c#,compiler-construction,codedom,C#,Compiler Construction,Codedom,我一直在尝试让CodeDom工作,以便在运行时为我的应用程序动态创建代码。然而,经过许多教程和反复试验,我遇到了一个似乎无法通过的问题。我不断地在代码上遇到编译器错误,这些代码看起来和应该的完全一样。当代码中没有“\”时,我会得到“无法识别的转义序列“\” 我得到的错误都在第1行。按顺序排列如下: CS1009 CS1056(连续3次) CS0116 以下是我所拥有的: 正在编译的代码: using System; using System.Windows.Forms; namespace sd
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);
}
}
}
public void编译(字符串文件)
{
var prov=新字典();
批准添加(“CompilerVersion”、“v2.0”);
CSharpCodeProvider c=新的CSharpCodeProvider();
ICodeCompiler comp=c.CreateCompiler();
CompilerParameters param=新的CompilerParameters();
param.GenerateExecutable=true;
param.outputasembly=文件+“.exe”;
参数referencedAssemblys.Add(“System.dll”);
param.referencedAssemblys.Add(“System.Windows.Forms.dll”);
if(c.Supports(GeneratorSupport.EntryPointMethod))
param.MainClass=“样本”;
CompilerResults results=comp.compileasemblyFromSource(参数,文件);
如果(results.Errors.Count>0)
{
foreach(结果中的编译器错误comperrr.Errors)
{
MessageBox.Show(“行号”+CompErr.Line+”,错误号:“+CompErr.ErrorNumber+”,“+CompErr.ErrorText+”;“+Environment.NewLine+Environment.NewLine”);
}
}
}
有没有什么我没有做的来编译它?有什么东西我错过了吗?我有点迷路了。提前感谢。我马上想到三件事:
param.outputasembly=file+“.exe”;
哪一行给出了错误?它是否在VS中编译?Shouldnt
compileAsemblyFromSource()中
包含源代码
而不是文件
?编辑:我编辑了代码以表示已更改的。--分号已经放进去了。我想我忘记了在粘贴到这里之前重新添加它们。无论如何:将Main更改为static,选中。添加所有资源DLL,选中。MainClass=“Sample”,check.File output name different,check.Result:在完全相同的行上有相同的5个错误。这是我不明白的,所有这些更改都有意义,但输出并不代表这一点。我甚至基本上从msdn复制了源代码,但没有成功。感谢您的帮助,但我必须继续查找。Changecompileasemblyfromsource
对compileasemblyfromfile
谢谢,这对我来说是一个非常简单的错误。在将其更改为FromFile并将main类更改为Namespace.Classname而不仅仅是Classname之后,我将其编译。感谢您指出,现在一切正常。