最近提到的PostSharp让我想起了这个:
去年在我工作的地方,我们考虑使用PostSharp将检测注入我们的代码中。这是在Team Foundation Server团队构建/持续集成环境中。
考虑到这一点,我对PostSharp的操作方式产生了一种唠叨的感觉 - 它编辑了编译器生成的IL。这让我感到困扰。
我并不担心PostSharp无法正常工作;我很担心这是我第一次回忆起这样的工具。我担心其他工具可能不会考虑到这一点。
事实上,当我们继续前进时,我们确实出现了一些问题,这些问题源于PostSharp对原始IL所处的文件夹感到困惑。这破坏了我们的构建。它似乎是由于与MSBUILD目标的冲突解决了项目引用。冲突似乎是由于PostSharp使用临时目录来存储IL的未修改版本。
无论如何,我当时没有StackOverflow来引用!既然我这样做了,我想问你们所有人是否知道编辑IL作为构建过程的一部分的任何其他工具;或者Microsoft是否在Visual Studio,MSBUILD,Team Build等中考虑了这种工具
更新:感谢您的回答。
最重要的是,至少在VS 2010中,微软真的应该意识到这种事情会发生。因此,如果在VS2010中存在这方面的问题,那么微软可能会分担责任。
答案 0 :(得分:4)
我了解Mono.Cecil,一个扩展System.Reflection工具集的框架库,它由Lin Fu项目使用。
我不确定构建过程支持,你应该检查它们的大小。
答案 1 :(得分:4)
.NET 4.0包含Microsoft Research的{{3}}项目,该项目在方法的前/后条件下执行运行时(以及一些编译时)断言。断言在库中实现,.NET编译器在IL中的方法调用中发出前/后条件。但是,由于合同通常在方法的开头指定,因此辅助工具需要重写IL以使断言按正确顺序排列并更正位置。
修改强>
(我找不到关于这些工具的任何其他技术信息)
我还没有使用Visual Studio 2010,但我看过代码合约功能的演示,它已集成到IDE构建过程中。 cccheck必须始终运行,如果构建的程序集中存在契约,则返回代码。如果它们存在,代码将表示ccrewrite应该运行。
答案 2 :(得分:3)
我知道Dotfuscator是一个代码混淆器,它确实修改了程序集程序集的IL,并在许多构建过程中使用它。
IL不仅可以修改代码混淆和保护,还可以为应用程序注入其他功能(请参阅运行时智能here上的(PreEmptive)博客文章。
此外,Microsoft的Common Compiler Infrastructure能够读入程序集,修改它们并重写它们。有关该项目,请参阅CodePlex。
答案 3 :(得分:1)
Fody是一个可扩展的工具,用于根据插件架构编织.net程序集。