2016-09-23 3 views
5

MSからのthisチュートリアルの後、私はRoslyn用のアナライザを作成しました。Roslyn Analyzerルールがビルドに失敗しない

ページによると、あなたはDiagnosticSeverity.Errorとしてルールをマークすることができ、これは、ビルドが破損する原因になります:

:私のコードで

In the line declaring the Rule field, you can also update the severity of the diagnostics you’ll be producing to be errors rather than warnings. If the regex string doesn’t parse, the Match method will definitely throw an exception at run time, and you should block the build as you would for a C# compiler error. Change the rule’s severity to DiagnosticSeverity.Error:

internal static DiagnosticDescriptor Rule = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, Category, DiagnosticSeverity.Error, isEnabledByDefault: true, description: Description);

を、私はここで説明するよう多かれ少なかれルールを作成しました

private static readonly DiagnosticDescriptor Rule = 
    new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, Category, 
    DiagnosticSeverity.Error, true, helpLinkUri: HelpUrl); 

このルールは正常に機能します。それは赤い線を投げ、エラーリストにメッセージを表示します。しかし、ビルドは成功し、アプリケーションを正常に実行することができます。

NB:この例ではThread.Sleepをキャプチャするためにこのルールを作成しました。

Code Capture

は、ルールがビルドを壊し確保するために必要な追加の設定はありますか?

答えて

11

これは、VSIXファイルから実行されるアナライザの機能です。ビルドがルールで失敗するようにするために

If the IDE-installed rules ran as part of the in-IDE build, it would result in IDE builds and command line builds having potentially very different outputs. For example, a user with code-cracker installed as a VSIX could end up filing a bug report that an open source project does not build due to an analyzer error (or perhaps a warning when the project uses /warnaserror). They would be forced to either uninstall the analyzer extension or modify the rule set used by the project to disable some rule that only exists on one developer's machine.

In contrast, rules that are installed via NuGet become part of the project and part of the build. They run the same way across developer machines, and they run the same way in-IDE, on the command line, and in automated build environments.

Source: IDE rules don't fail builds

、プロジェクトへのnugetパッケージとしてアナライザを追加する必要があります。これにより、失敗によりビルドが期待どおりに失敗する可能性があります。

関連する問題