【问题标题】:How do I compile raw IL code from a single string?如何从单个字符串编译原始 IL 代码?
【发布时间】:2021-07-24 01:33:14
【问题描述】:

我正在尝试编写一个 MSBuild 任务,让我可以将 IL 代码内联到方法中,类似于 Glenn Slayden's answer to this question。我已经编写了代码来反编译和修改 IL,但我不知道如何重新编译它。
我没有找到任何库,包括 Mono.Cecil,允许您从单个字符串编译原始 IL 代码。 Glenn Slayden 使用 ILAsm,但我找不到适用于 .NET 5 的 ILAsm。

如何从单个字符串编译原始 IL 代码?

【问题讨论】:

  • 您可以使用ilasm.exe 编译已保存到文件的IL,然后使用Assembly.Load(File.ReadAllBytes("path")) 加载它。很难判断这是否是一种有效的方法,因为您没有在生成 IL 时包含您的实现。
  • 这能回答你的问题吗? Compiling code dynamically using C#
  • 不,这不能回答我的问题。我有一串要编译的 IL 代码。 @DekuDesu 我无法使用 ILAsm,因为缺少 .NET 5 的实现。如果有,请您将它或与它相关的文章发送给我吗?像 ILAsm 这样的东西似乎是我目前唯一的选择。

标签: c# .net-5 cil


【解决方案1】:

Microsoft 现在在 NuGet 上使用以下 ID 发布 ILAsmILDasm

Microsoft.NETCore.ILAsm
Microsoft.NETCore.ILDAsm

您可以使用nuget install {ID} 将它们安装到当前目录,然后使用{ID}.{version}\runtimes\native\{exe name}.exe 运行它们。

【讨论】:

  • 我希望我在打猎之前就知道这一点!谢谢!
【解决方案2】:

我找到了问题的答案。 3F,制作DllExport的人,有一个修改版的CoreCLR,附带ILAsm和ILDasm。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-17
    • 2020-01-22
    • 1970-01-01
    • 2012-04-10
    • 2018-09-05
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多