我有一个问题。如何从.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
的错误,看起来像这样:
我相信那是关于将此函数映射到c#
语言的事情。有什么想法,我在做什么错了?
编辑:
code
数组如下:
答案 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