MSTEST0072: '[AssemblyFixtureProvider]' は、事前コンパイルではサポートされていません

財産
ルール識別子 MSTEST0072
タイトル '[AssemblyFixtureProvider]' は、事前コンパイルではサポートされていません
Category Usage
修正が破壊的か非破壊的か Non-breaking
既定で有効 Yes
既定の重大度 Warning
バージョン で導入された 4.4.0 (プレビュー)
コード修正はありますか No

Important

このアナライザーは MSTest 4.4 用に計画されており、MSTest 4.4.0 がリリースされるまでプレビュー ビルドでのみ使用できます。

原因

プロジェクトは、ネイティブ AOT (PublishAot) または Blazor WebAssembly AOT (RunAOTCompilation) を使用して発行するときに、直接または参照先ライブラリを介して[AssemblyFixtureProvider]を適用します。

ルールの説明

[AssemblyFixtureProvider] 検出では、ランタイム アセンブリ参照グラフについて説明します。このグラフでは、ランタイムが動的コードを生成する必要があります。 ネイティブ AOT や Blazor WebAssembly AOT などの事前コンパイル フレーバーでは動的コードを生成できないため、ランタイムは検出を自動的にスキップし、フィクスチャの [AssemblyInitialize]/[AssemblyCleanup] メソッドは実行されません。

// Violation: ignored at run time under Native AOT / Blazor WebAssembly AOT.
[assembly: AssemblyFixtureProvider(typeof(SharedFixtures))]

アナライザーは、属性が現在のコンパイルで適用されているか、参照されているアセンブリに適用されているかに関係なく、この診断を報告します。これは、ネイティブ AOT テスト プロジェクトを使用するとアセンブリフィクスチャが自動的に失われるためです。

違反を修正する方法

共有[AssemblyFixtureProvider] ライブラリに依存するのではなく、[AssemblyInitialize]メソッドと[AssemblyCleanup] メソッドをテスト アセンブリで直接宣言します。

public static class Fixtures
{
    [AssemblyInitialize]
    public static void Init(TestContext context) { }
}

どのようなときに警告を抑制するか

ネイティブ AOT または Blazor WebAssembly AOT を使用して実際に発行されるプロジェクトでは、フィクスチャ メソッドが実行されなくなり、設定された状態がテストに対して存在しないため、この規則による警告を抑制しないでください。 抑制は、AOT で発行された構成で影響を受けるテストが実行されない場合にのみ妥当です。

警告を抑制する

単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。

#pragma warning disable MSTEST0072
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0072

ファイル、フォルダー、またはプロジェクトのルールを無効にするには、noneでその重要度をに設定します。

[*.{cs,vb}]
dotnet_diagnostic.MSTEST0072.severity = none

詳細については、「 コード分析の警告を抑制する方法」を参照してください。

こちらも参照ください