从输入字符串中释放.exe文件作为代码

时间:2019-04-02 07:32:13

标签: c# compiler-errors compiler-construction csc

我有一个问题。如何从.exe释放string input文件?

我想编译为exe Hello World C#示例。这是我的代码:

var code = input.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);

var provider = CodeDomProvider.CreateProvider("CSharp");
string exeName = string.Format("test.exe", Environment.CurrentDirectory);
var parameters = new CompilerParameters
{
    GenerateExecutable = true,
    OutputAssembly = exeName,
    GenerateInMemory = false,
    TreatWarningsAsErrors = false
};
parameters.ReferencedAssemblies.Add("System.dll");

var compilerResults = provider.CompileAssemblyFromSource(parameters, code);

if (compilerResults.Errors.Count > 0)
    //Error

else
    //Succes, file saved int Debug folder (exe file)

从上面的代码中,我想将code设为string,然后创建string[]数组(每个数组的记录是代码的下一行)。然后,我要将那个exe文件保存到Debug文件夹中。

但是现在,我从compilerResults.Errors中收到了32的错误,看起来像这样:

enter image description here

我相信那是关于将此函数映射到c#语言的事情。有什么想法,我在做什么错了?

编辑:

code数组如下:

enter image description here

1 个答案:

答案 0 :(得分:3)

CodeDomProvider.CreateAssemblyFromSource希望数组中的每个字符串都是源文件-您要为每个元素提供一条 line

换句话说,您不需要打{{1​​}}来开始。只需使用:

$ ./recursive-egrep sys  < /etc/passwd
sys:x:3:3:sys:/dev:/usr/sbin/nologin
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
$ ./recursive-egrep sys no  < /etc/passwd
sys:x:3:3:sys:/dev:/usr/sbin/nologin