Geo*_*uer 5 .net c# reflection attributes
我有一个带有以下签名的方法
[Specification]
public void slide_serialization() {
Run Code Online (Sandbox Code Playgroud)
从我的代码中的一点来看,我需要向上移动堆栈跟踪以找到最接近的方法SpecificationAttribute(性能不是问题).我发现这个方法,但我找不到任何自定义属性.

我认为我从未见过这种情况.可能是什么原因?
这是一个单元测试程序集,在Build中禁用了Optimization.
代码片段并不多见.但是堆栈跟踪很清楚发生了什么.请注意<>c_DisplayClass5跟踪中的类型名称.这是一个自动生成的类,由C#编译器在重写代码以编译带闭包的lambda表达式时生成.这个Q + A的主题.
slide_serialization()方法也被重写,现在获取不可写的<slide_serialization>_b40方法名称.使用尖括号是有意的,它确保自动生成的代码中的成员永远不会与程序中的标识符名称冲突.
并且您在编译器中发现了代码重写逻辑的限制.它不会将原始代码上的[attributes]转移到重写代码.微软是否认为投入这些努力是不够重要的,或者他们无法正确地为每一个可能的代码重写规则做到这一点尚不清楚.我强烈怀疑后者,这种限制非常痛苦.通常由程序员发现需要[SuppressMessage]属性以便在没有警告的情况下通过代码分析而引起懊恼.
没有简单的解决方法,你必须处理这个限制.