Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| Property | Value |
|---|---|
| Identyfikator reguły | MSTEST0072 |
| Tytuł | Element "[AssemblyFixtureProvider]" nie jest obsługiwany podczas kompilacji z wyprzedzeniem |
| Kategoria | Usage |
| Poprawka jest przełomowa lub nieprzełomowa | Non-breaking |
| Domyślnie włączone | Tak |
| domyślna ciężkość | Warning |
| wprowadzone w wersji | 4.4.0 |
| Czy istnieje poprawka kodu | Nie |
Przyczyna
Projekt używa elementu [AssemblyFixtureProvider] bezpośrednio lub za pośrednictwem biblioteki, do której projekt się odwołuje, podczas publikowania z użyciem Native AOT (PublishAot) lub Blazor WebAssembly AOT (RunAOTCompilation).
Opis reguły
[AssemblyFixtureProvider] odkrywanie przechodzi przez graf odwołań zestawów środowiska uruchomieniowego, co wymaga, aby środowisko uruchomieniowe generowało kod dynamiczny. Warianty kompilacji wyprzedzającej, takie jak Native AOT i Blazor WebAssembly AOT, nie mogą generować kodu dynamicznego, więc środowisko uruchomieniowe po cichu pomija wykrywanie, a metody fikstury testowej [AssemblyInitialize]/[AssemblyCleanup] nigdy nie są wykonywane.
// Violation: ignored at run time under Native AOT / Blazor WebAssembly AOT.
[assembly: AssemblyFixtureProvider(typeof(SharedFixtures))]
Analizator zgłasza tę diagnostykę niezależnie od tego, czy atrybut został zastosowany w bieżącej kompilacji, czy w zestawie, do którego istnieje odwołanie, ponieważ w obu przypadkach projekt testowy Native AOT, który z niego korzysta, po cichu traci swoje elementy fixture zestawu.
Jak naprawić naruszenia
Zadeklaruj metody [AssemblyInitialize] i [AssemblyCleanup] bezpośrednio w asemblacji testowej, zamiast polegać na współdzielonej bibliotece [AssemblyFixtureProvider].
public static class Fixtures
{
[AssemblyInitialize]
public static void Init(TestContext context) { }
}
Kiedy pomijać ostrzeżenia
Nie wyciszaj ostrzeżeń z tej reguły dla projektu, który jest faktycznie publikowany przy użyciu Native AOT lub Blazor WebAssembly AOT, ponieważ metody fixture nie zostaną uruchomione, a stan, który konfigurują, nie będzie dostępny podczas testów. Pomijanie jest uzasadnione tylko wtedy, gdy konfiguracja opublikowana przez usługę AOT nie uruchamia testów, których dotyczy problem.
Pomijanie ostrzeżenia
Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable MSTEST0072
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0072
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0072.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.