Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| 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.