4

ビルド時にすべてのStyleCopルールを実行するStyleCop.TargetsプロジェクトをインポートするようにC#プロジェクトファイルを設定しました。これは素晴らしいことであり、VisualStudioを介してコンパイルするときにプロジェクトのエラーをゼロにすることができます。

ただし、(同じマシン上で)MSBuildを使用してコンパイルすると、次の行に沿ってエラーが発生します。

The documentation text within the constructor's summary tag must begin with the text: Initializes a new instance of the <see cref="MyClass" /> class.

初期化の「Z」に注目してください...コード内のアメリカニズムに関するエラーが発生しないように、Settings.StyleCopをen-GBグローバル設定で構成しました。ただし、これがMSBuildでエラーを引き起こす理由を理解することはできません。

ルールを変更した場合と同じように、MSBuildが同じSettings.StyleCopファイルを使用していることはわかっています(TabsMustNotBeUsedなど)。MSBuild(およびVisual Studio)はこの変更を取得し、エラーをあちこちにスローします。

StyleCop 4.7、Visual Studio 2012、MSBuild4を使用しています。

これが私のSettings.StyleCopファイルのスニペットです:

<StyleCopSettings Version="105">
  <GlobalSettings>
    <StringProperty Name="Culture">en-GB</StringProperty>
  </GlobalSettings>
  <Parsers>
    <Parser ParserId="StyleCop.CSharp.CsParser">
      <ParserSettings>
        <BooleanProperty Name="AnalyzeDesignerFiles">False</BooleanProperty>
      </ParserSettings>
    </Parser>
  </Parsers>
  <Analyzers>
    <Analyzer AnalyzerId="StyleCop.CSharp.SpacingRules">
      <Rules>
        <Rule Name="TabsMustNotBeUsed">
          <RuleSettings>
            <BooleanProperty Name="Enabled">False</BooleanProperty>
          </RuleSettings>
        </Rule>
      </Rules>
      <AnalyzerSettings />
    </Analyzer>
  </Analyzers>
</StyleCopSettings>

手がかりはありますか?

乾杯!

4

1 に答える 1

2

最新バージョンのStyleCop(4.7.41.0)またはそれに近いバージョンを使用していると想定しています。4.7バージョンラインには多くの変更と修正があり、かなり定期的なアップデートがリリースされています。

カルチャをen-USに戻すフォルダー階層の下位(サブフォルダー内)に別のSettings.StyleCopファイルが必要だと思います。この特定の設定ファイル(TabsMustNotBeUsedなど)で他のルールを変更しても、他の設定ファイルで再度設定しない限り、期待どおりに動作します。考えられる原因は、StyleCopが実行されている作業フォルダーである可能性があります。

ファイルシステムでクイックスキャンを実行して、他の設定ファイルが見つかるかどうかを確認し、見つかった場合は、それらのカルチャ設定を確認することをお勧めします。

私が行ったもう1つのトリックは、ソリューションルートで設定ファイルのマージを停止することです。これは、次の設定を追加することで実行できます。

<GlobalSettings>
    <StringProperty Name="MergeSettingsFiles">NoMerge</StringProperty>
</GlobalSettings>

これにより、階層の上位に構成された設定(StyleCopアプリケーションフォルダー内の設定など)に関係なく、StyleCopがすべての開発マシンとビルドマシンで同じように動作するようになります。ただし、これを行う場合は、マージされなくなったファイルから必要なすべての設定をコピーしてください。あなたの説明から、これがこの特定の問題を解決するかどうかは疑わしいですが、ルールの一貫性を維持するのに役立つことがわかりました。

于 2012-11-07T08:36:42.397 に答える