[英]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。 恐怕我不知道上这样的课。
实际上,许多混淆器(例如preemtive和BitHelmet)都使用ilasm.exe和Process。 我认为这是最好的策略。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.