繁体   English   中英

使用.NET 3.5和文件中的C#在运行时编译IL代码

[英]Compile IL code at runtime using .NET 3.5 and C# from file

我想获取一个IL文件,并在运行时将其编译回exe。

现在,我可以使用process.start来启动带有参数(ilasm.exe)的命令行,但是我想从我将创建的C#服务中自动执行此过程。

有没有办法用反射和reflect.emit做到这一点?

尽管这可行:

string rawText = File.ReadAllText(string.Format("c:\\temp\\{0}.il", Utility.GetAppSetting("baseName")), Encoding.ASCII);

rawText = rawText.Replace("[--STRIP--]", guid);

File.Delete(string.Format("c:\\temp\\{0}.il", Utility.GetAppSetting("baseName")));

File.WriteAllText(string.Format("c:\\temp\\{0}.il", Utility.GetAppSetting("baseName")),rawText, Encoding.ASCII);

pi = new ProcessStartInfo();
pi.WindowStyle = ProcessWindowStyle.Hidden;
pi.FileName = "\"" + ilasm + "\"";
pi.Arguments = string.Format("c:\\temp\\{0}.il", Utility.GetAppSetting("baseName"));

using(Process p = Process.Start(pi))
{
    p.WaitForExit();
}

这并不理想,因为我真的希望这是一个简化的过程。

我已经看到了在运行时创建IL,然后保存的示例,但是我需要使用文件格式中已有的IL并将其编译回exe。

谢谢。

“简化的流程”是什么意思? 它对您的表现还不够好吗? 我知道产生一个单独的过程有点脏,但这是我想到的最简单的方法。 拥有适当的权限,您仍然应该可以通过服务执行此操作。

您需要类似CSharpCodeProvider的东西,但要使用IL。 恐怕我不知道上这样的课。

实际上,许多混淆器(例如preemtiveBitHelmet)都使用ilasm.exe和Process。 我认为这是最好的策略。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM