C# 哪些工具执行IL的编译后修改?
最近一次提到PostSharp让我想起了这一点: 去年在我工作的地方,我们考虑使用PostSharp将工具注入到代码中。这是在Team Foundation Server团队构建/持续集成环境中进行的。 考虑到这一点,我对PostSharp的操作方式有一种烦人的感觉——它编辑编译器生成的IL。这让我有点烦恼 我并不太担心PostSharp不能正确地完成它的工作;我担心这是我第一次听到这样的工具。我担心其他工具可能没有考虑到这一点 事实上,在我们前进的过程中,我们确实遇到了一些问题,原因是PostSharp对原始IL所在的文件夹感到困惑。这破坏了我们的构建。这似乎是由于与解析项目引用的MSBUILD目标冲突所致。冲突似乎是由于PostSharp使用临时目录存储未修改版本的IL 无论如何,当时我没有StackOverflow可供参考!现在我知道了,我想问你们大家是否知道任何其他工具可以在构建过程中编辑IL;或者微软是否在VisualStudio、MSBUILD、TeamBuild等中考虑了这类工具C# 哪些工具执行IL的编译后修改?,c#,postsharp,intermediate-language,C#,Postsharp,Intermediate Language,最近一次提到PostSharp让我想起了这一点: 去年在我工作的地方,我们考虑使用PostSharp将工具注入到代码中。这是在Team Foundation Server团队构建/持续集成环境中进行的。 考虑到这一点,我对PostSharp的操作方式有一种烦人的感觉——它编辑编译器生成的IL。这让我有点烦恼 我并不太担心PostSharp不能正确地完成它的工作;我担心这是我第一次听到这样的工具。我担心其他工具可能没有考虑到这一点 事实上,在我们前进的过程中,我们确实遇到了一些问题,原因是Post
更新:谢谢您的回答 底线似乎是,至少在VS2010中,微软真的应该意识到这种事情可能发生。因此,如果VS2010在这方面存在问题,那么微软可能会分担责任。我知道,一个扩展System.Reflection工具集的框架库,项目使用它 我不确定构建过程支持,您应该查看它们的大小。.NET4.0包括Microsoft Research的项目,该项目对方法的前/后条件执行运行时(和一些编译时)断言。断言在库中实现,而.NET编译器在IL中作为方法调用发出前置/后置条件。然而,由于契约通常是在方法的开头指定的,因此辅助工具需要重写IL,以将断言置于正确的顺序和位置 编辑:
- cccheck是运行后期生成的工具,是在编译时验证契约的静态检查器
- ccrewrite是运行cccheck后、重写IL并从合同生成运行时检查的工具
我还没有使用VisualStudio2010,但我已经看到了代码契约特性的演示,它集成到IDE构建过程中。cccheck必须始终运行,如果生成的程序集中存在合同,则返回代码。如果它们存在,代码将表示应该运行ccrewrite。我知道Dotfuscator,一个代码混淆器,确实修改了程序集的IL,并且在许多构建过程中使用它 修改IL不仅是为了代码混淆和保护,而且是为了向应用程序中注入额外的功能(请参阅我们(PreEmptive’s)关于运行时智能的博客文章)
此外,Microsoft的通用编译器基础结构能够读入程序集、修改程序集并重写程序集。有关该项目,请参阅。是一个基于插件体系结构的可扩展工具,用于编织.net程序集。您能详细介绍第二个工具吗?Reflector有一个名为Reflectil()的插件这是基于Mono.Cecil的。