代码之家  ›  专栏  ›  技术社区  ›  John Saunders

哪些工具执行IL的编译后修改?

  •  5
  • John Saunders  · 技术社区  · 15 年前

    最近一次提到PostSharp让我想起了这一点:

    去年在我工作的地方,我们考虑使用PostSharp将工具注入到代码中。这是在Team Foundation Server团队构建/持续集成环境中进行的。

    考虑到这一点,我对PostSharp的操作方式有一种烦人的感觉——它编辑编译器生成的IL。这让我有点烦恼。

    我并不太担心PostSharp不能正确地完成它的工作;我担心这是我第一次听到这样的工具。我担心其他工具可能没有考虑到这一点。

    由于PostSharp对原始IL所在的文件夹感到困惑,因此出现了一些问题。这破坏了我们的构建。这似乎是由于与解析项目引用的MSBUILD目标冲突所致。冲突似乎是由于PostSharp使用临时目录存储未修改版本的IL。


    谢谢你的回答。

    应该

    4 回复  |  直到 13 年前
        1
  •  4
  •   Fabrício Matté    15 年前

    我知道 Mono.Cecil ,一个扩展System.Reflection工具集的框架库,由 Lin Fu 项目

    我不确定构建过程支持,您应该查看它们的大小。

        2
  •  4
  •   Steve Guidi    15 年前

    .NET 4.0包括 code contracts MicrosoftResearch的项目,它对方法的前/后条件执行运行时(和一些编译时)断言。断言在库中实现,而.NET编译器在IL中作为方法调用发出前置/后置条件。然而,由于契约通常是在方法的开头指定的,因此辅助工具需要重写IL,以将断言置于正确的顺序和位置。

    • 是运行后期生成的工具,是在编译时验证契约的静态检查器
    • 重写 是运行后cccheck、重写IL和从契约生成运行时检查的工具

    (我找不到有关这些工具的任何其他技术信息)

    我还没有使用VisualStudio2010,但我已经看到了代码契约特性的演示,它集成到IDE构建过程中。cccheck必须始终运行,如果生成的程序集中存在合同,则返回代码。如果它们存在,代码将表示应该运行ccrewrite。

        3
  •  3
  •   rIPPER    15 年前

    我知道Dotfuscator,一个代码混淆器,确实修改了程序集的IL,并且在许多构建过程中使用它。

    修改IL不仅是为了代码混淆和保护,而且是为了向应用程序中注入额外的功能(请参阅我们(PreEmptive’s)关于运行时智能的博客文章) here

    此外,Microsoft的通用编译器基础结构还具有读入程序集、修改程序集和重写程序集的能力。看见 CodePlex 为了这个项目。

        4
  •  1
  •   Robert Brooker Colin G Clarke    9 年前

    Fody 是一个可扩展的工具,用于基于插件体系结构编织.net程序集。