我可以确保resharper不会更改此类中字段的顺序吗?

时间:2018-10-30 13:31:42

标签: resharper structlayout

我正在使用this NetResource class将文件发送到网络驱动器,它看起来像这样:

[StructLayout(LayoutKind.Sequential)]
public class NetResource
{
    public ResourceScope Scope;
    public ResourceType ResourceType;
    public ResourceDisplayType DisplayType;
    public int Usage;
    public string LocalName;
    public string RemoteName;
    public string Comment;
    public string Provider;
}

现在,如StructLayout属性所暗示的那样,这些字段的顺序必须保持不变。

但是,当某人运行重新共享清理时,重新共享决定移动字段,这将破坏代码。

有什么办法告诉重磨者不要搞砸它吗?我觉得如果我做不到,那么最终有人会破坏代码并且不知道在哪里看。

但是,我认为一个中等的解决方案是创建一个单元测试,可以检查布局是否符合预期。

编辑:我见过this answer,但是它已经过时了,并且需要更新共享工具设置。我也不能保证同事使用此共享工具设置。我正在寻找一种将其添加到代码中的方法,就像您可以// ReSharper disable once InconsistentNaming

1 个答案:

答案 0 :(得分:2)

我在这里看到一些解决方案:

  • 您可以使用JetBrains.Annotations中的NoReorderAttribute标记该类(有几种方法可以将它们添加到项目中)。然后,ReSharper将停止对标记的代码实体内的成员重新排序。
  • 主要涉及already mentioned answer,我将向您展示如何在最新的ReSharper版本中获得相同的东西。您所需要做的就是在ReSharper中将“ System.Runtime.InteropServices.StructLayoutAttribute”添加到“不可重排类型”模式中。选项|代码编辑| C#|文件布局。

步骤1: enter image description here

第2步:enter image description here

第3步:enter image description here

第4步:enter image description here

第5步:enter image description here

要确保您的同事在ReSharper中使用相同的设置,请将此更改保存到Solution team shared layer(“选项”对话框底部的Save To)。然后,如果您的任何同事打开该解决方案,ReSharper将自动使用此层中的设置,而无需执行其他操作。