[英]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.