理解CIL有什么好处?
你必须知道装配才能理解它吗?这些文件中的代码看起来很相似.
我如何了解更多信息?有关它的任何书籍,如Jon Skeet的C#书吗?
我在学习IL和CLR时发现这些书很有用:
在IL Assembler里面,Serge Lidin
编译.NET公共语言运行时,John Gough
当然,你会想要ECMA规格.
阅读它们会给你很多信息.
(我也听说过C#的CLR非常好,但是我自己还没看过.)
当您遇到问题时,了解IL和CLR将为您提供帮助.(漏洞抽象?)虽然现在有了像Reflector这样好的反编译器,但我发现自己并没有使用ildasm.
理解装配不是必需的,但它会有所帮助.在大多数情况下,IL实际上非常简单.
IL派上用场的一个例子是确切地确定F#究竟是如何编译某些结构的.另一个是能够使用DynamicMethod和System.Reflection.Emit,它可以在某些情况下打开一些不错的解决方案.
了解CIL可以让您在某些边缘情况下从.NET框架中获得更多.
请注意,您无需阅读原始操作码即可从此知识中受益.IL和程序集的一般知识,加上Mono.Cecil.dll可以创造奇迹:
如何使用NotImplementedException计算方法?
如何确保标有ImmutableAttribute的类确实是不可变的?
如何查找目标对象的扩展方法?
如何更改.NET程序集的命名空间?
PS:对我而言,获得一些实用的IL知识的最佳来源方法是阅读一些Gendarme规则的C#代码(它是使用Mono.Cecil进行代码内省的FxCop的类比).此外,这篇文章是一个很好的开始:解析方法体的IL.