c# - 如何将CIL代码插入到C#中

标签 c# cil

是否可以在 C# 方法中插入 IL 代码?

最佳答案

我只是posted a utility它允许使用自定义属性将整个 C# 函数体自动替换为内联 IL。与类似的实用程序一样,它通过 ILDASM/ILASM 往返工作,可以将其设置为构建后步骤。该工具还可以调整 PDB,以便在调试器中的各个 IL 指令上保留单步执行和设置断点。它与其他一些往返 IL 内联器的不同之处在于它(仅)替代了整个函数体,如下所示:

    class MyClass
    {
        [ILFunc(@"
    .locals init ([0] int32 i_arg)
        ldc.i4.3
        ret
    ")]
        int MyFunc(int i_arg)
        {
            return 3;
        }
    };

对于性能要求很高的方法,我尝试使用 DynamicMethod 来改进编译器生成的 IL,但发现由于委托(delegate)调用开销而失去了优势。假设没有您真正需要 DynamicMethod 的运行时自定义,Inline IL 提供了手动调整 IL 的好处而没有这种影响。

完整的源代码位于http://www.glennslayden.com/code/c-sharp/inline-il

关于c# - 如何将CIL代码插入到C#中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3328901/

相关文章:

c# - 区分 Windows 版本的最简单方法是什么?

c# - .NET 2.0/C# 中泛型方法元数据的签名格式是什么?

c# - 表达式主体语法与 IL 级别的 Getter 语法有什么区别?

c# - 有没有一种方法可以序列化实现 ICollection 的类的公共(public)属性

javascript - 无法从 Asp.NET 中的 C# 调用 javascript 函数

.net - 为什么这个 .NET IL 空值检查没有按预期工作?

.net - 这些 CIL 语句之间有什么区别?

c# - cecil : Instruction. Instruction.OpCode.Code值对应的操作数类型

c# - 实现快捷方式编辑器文本框的最佳方法是什么?

c# - 将cmd中的数据写入内存而不是文件,用C#抓取