【问题标题】:StyleCop SA1202 - Internal property with private setStyleCop SA1202 - 带有私有集的内部属性
【发布时间】:2023-12-13 15:48:01
【问题描述】:

我收到一个 StyleCop 错误,我不确定如何修复,除了在我的班级上添加一条禁止消息,这是一种不好的做法。如果您知道如何解决此问题,或者知道这是否只是 StyleCop 错误或缺陷,请告诉我。

注意:我不知道这是否会有所不同,但我正在使用 HEISER Christophe 为 Visual Studio 2015 提供的 Visual StyleCop 扩展。

我有一个具有内部属性的内部类。示例:

internal bool Property1 { get; set; }
internal int Property2 { get; private set; }

尽管我的所有属性都有内部访问器,并且在类中正确排序,根据 StyleCopVisual StyleCop 排序规则文档,我仍然收到 SA1202 错误“所有私有属性必须是放在所有内部属性之后”。这个错误对我来说没有意义,因为我的所有属性都具有内部访问权限。我认为这是因为私有集,但即使我在没有私有设置器的属性之后(甚至之前)使用私有设置器订购所有属性,我仍然会收到相同的错误。在我看来,StyleCop 几乎无法识别或无法正常处理这种情况。

关于如何解决这个问题(在课堂上没有禁止消息)或者这只是 StyleCop 中的一个错误/缺陷的任何想法?

【问题讨论】:

    标签: stylecop


    【解决方案1】:

    这似乎是 Visual StyleCop 扩展的错误。

    使用StyleCop.MSBuild 实现可以正常构建。

    我已将此作为问题添加到 Github

    【讨论】:

      【解决方案2】:

      Jafo,你能把你班级的完整代码粘贴到这里吗:Visual StyleCop - GitHub - Issue 47,因为它适用于我,下面的代码:

      // --------------------------------------------------------------------------------------------------------------------
      // <copyright file="InternalClass.cs" company="TestCompany">
      //   MS-PL
      // </copyright>
      // --------------------------------------------------------------------------------------------------------------------
      namespace ConsoleApplication10
      {
          /// <summary>
          /// Test internal class.
          /// </summary>
          internal class InternalClass
          {
              /// <summary>
              /// Gets or sets a value indicating whether the property one.
              /// </summary>
              internal bool Property1 { get; set; }
      
              /// <summary>
              /// Gets the property two.
              /// </summary>
              internal int Property2 { get; private set; }
          }
      }
      

      【讨论】:

      • 您是对的,将参数移动到您在示例中显示的配置不会产生 StyleCop 错误。我很确定我以前尝试过这种配置,但我可能错过了移动参数,因为我的代码中有 ~20 个参数。而且,在这种情况下,我找不到任何直接关于如何订购参数的文档。感谢您的回复! (我还应该声明我今天早上更新了 Visual StyleCop,这可能是也可能不是一个因素)