我有一个类,其中FileHelpers依赖于此类文件中的字段顺序。如果类文件得到一个代码清理运行它将导致字段按字母顺序排序并且无形地破坏我的类。
由于我想避免意外发生这种情况,是否有一个resharper comment指令来禁用类的代码清理?
答案 0 :(得分:12)
您可以自定义默认成员布局XML文件,并在代码清理的“重新排序成员”步骤中指定要忽略的模式。
查看Resharper设置下的类型成员布局部分。您可以看到已经为COM接口和带有StructLayoutAttribute
:
<!--Do not reorder COM interfaces-->
<Pattern>
<Match>
<And Weight="100">
<Kind Is="interface"/>
<HasAttribute
CLRName="System.Runtime.InteropServices.InterfaceTypeAttribute"/>
</And>
</Match>
</Pattern>
<!--Do not reorder when StructLayoutAttribute is set -->
<Pattern>
<Match>
<And Weight="100">
<Or>
<Kind Is="struct"/>
<Kind Is="class"/>
</Or>
<HasAttribute
CLRName="System.Runtime.InteropServices.StructLayoutAttribute"/>
</And>
</Match>
</Pattern>
您可以轻松创建自己的IgnoreTypeMemberReorderingAttribute
,并在XML文件中添加一小部分,以检查它。
答案 1 :(得分:10)
我相信Resharper会观察[StructLayout(LayoutKind.Sequential)]属性。
更新:我认为这在编写本课时适用于类,但在当前版本的Resharper(10)中,它似乎只适用于结构,而不适用于类。所以它在许多互操作情况下可能仍然有用,但不是保持任何类的顺序的一般方法。
答案 2 :(得分:2)
应用于您的字段的另一个有用属性是[FieldOrder(1)]
,因此您明确定义了订单...我喜欢它作为 just-in-case 来防范字段被重新订购
不确定此版本的FileHelpers是什么版本......我正在使用NuGet安装的v2.9.9.0