MSTEST0072: '[AssemblyFixtureProvider]' non è supportato con la compilazione anticipata

Proprietà Value
ID regola MSTEST0072
Titolo '[AssemblyFixtureProvider]' non è supportato con la compilazione anticipata
Categoria Utilizzo
La modifica è dirompente o non dirompente Non rompente
Abilitato per impostazione predefinita Sì
Gravità predefinita Warning
introdotta nella versione 4.4.0
È presente una correzione del codice No

Cause

Un progetto usa [AssemblyFixtureProvider], direttamente oppure tramite una libreria referenziata, quando viene pubblicato con Native AOT (PublishAot) o Blazor WebAssembly AOT (RunAOTCompilation).

Descrizione della regola

[AssemblyFixtureProvider] Il rilevamento percorre il grafo dei riferimenti dell'assembly di runtime, il che richiede al runtime di generare codice dinamico. Le versioni di compilazione in anticipo, ad esempio Native AOT e Blazor WebAssembly AOT, non possono generare codice dinamico, quindi il runtime ignora automaticamente l'individuazione e i metodi della [AssemblyInitialize]/[AssemblyCleanup] fixture non vengono mai eseguiti.

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

L'analizzatore segnala questa diagnostica sia che l'attributo venga applicato nella compilazione corrente sia che venga applicato in un assembly di riferimento, perché in entrambi i casi il progetto di test Native AOT che lo utilizza perde silenziosamente le proprie fixture dell'assembly.

Come correggere le violazioni

Dichiarare i metodi [AssemblyInitialize] e [AssemblyCleanup] direttamente nell'assembly di test anziché fare affidamento su una libreria [AssemblyFixtureProvider] condivisa.

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

Quando eliminare gli avvisi

Non sopprimere gli avvisi di questa regola per un progetto che viene effettivamente pubblicato con Native AOT o Blazor WebAssembly AOT, perché i metodi della fixture non verranno eseguiti e qualsiasi stato da essi inizializzato non sarà disponibile per i test. L'eliminazione è ragionevole solo se la configurazione pubblicata da AOT non esegue i test interessati.

Eliminare un avviso

Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.

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

Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità su none nel file di configurazione .

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

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.

Vedere anche