2012-02-12 80 views
2

我一直在试图让CodeDom工作,所以我可以在运行时动态地为我的应用程序创建代码。然而,经过许多教程和试验和错误之后,我遇到了一个我似乎无法通过的问题。我不断收到编译器错误的代码,看起来应该像它应该。当我的代码中没有任何'\'时,我会得到“无法识别的转义序列'\'”。CodeDom编译器C#

我得到的误差都在1号线在这里,他们是为了: CS1009 CS1056(连续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); 
      } 
     } 
    } 

有没有我没有做的事来编译它的权利?有什么我失踪?我有点迷失在这里。提前致谢。

+0

该行给出的错误吗?它在VS编译? – 2012-02-12 04:22:17

+0

不应该'CompileAssemblyFromSource()'包含了'源'而不是'文件'? – C4u 2015-04-20 10:02:31

回答

5

三件事情浮现在脑海中马上:

  1. 有代码中没有分号你试图编译。
  2. 如果Main应该是您的入口点,请将其设为静态。
  3. 让你的源文件比目标文件不同(类似param.OutputAssembly = file + ".exe";

修复这些真的只是第一步,你还必须配置你的输出需要引用的组件,它不会是一个坏主意,设置MainClass在您使用的是该CompilerParameters。

A nice example on MSDN

+0

编辑:我编辑代码来表示已更改。 - 分号的东西已经放入。我想我忘了在粘贴之前忘了重新添加它们。无论如何:将Main更改为静态,请检查。添加所有资源DLL,检查。 MainClass =“Sample”,检查。文件输出名称不同,请检查。结果:完全相同的行上有5个相同的错误。这是我没有得到的,所有这些变化都是有意义的,但输出结果并不代表这一点。我甚至基本上从msdn复制源码,但没有成功。感谢您的帮助,但我必须继续关注它。 – ozdrgnaDiies 2012-02-12 04:55:22

+2

将'CompileAssemblyFromSource'更改为'CompileAssemblyFromFile' – mlorbetske 2012-02-12 05:10:43

+0

谢谢,这是我的一个非常简单的错误。将它更改为FromFile并将MainClass更改为Namespace.Classname而不仅仅是Classname之后,我将其编译。感谢您指出,现在所有作品。 – ozdrgnaDiies 2012-02-12 05:24:05