Sprache
Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
| Property | Wert |
|---|---|
| Regel-ID | MSTEST0088 |
| Title | Die Injektion von Testklassen in den MSTest-Host wird vom ausgewählten Build-Modus nicht unterstützt |
| Category | Usage |
| Fix führt oder führt nicht zur Unterbrechung | Non-breaking |
| Standardmäßig aktiviert | Yes |
| Voreingestellte Schwere | Error |
| wurde in Version eingeführt. | 4.5.0 |
| Gibt es eine Codekorrektur | No |
Ursache
Sie aktivieren die hosteigene MSTest-Testklasseneinfügung AddMSTestTestClassInjection über das experimentelle MSTest.Extensions.Hosting Paket, aber das Testprojekt verwendet einen nicht unterstützten Buildmodus.
Die Regel gilt für die folgenden Einstellungen:
| Buildmodus | Setting |
|---|---|
| Natives AOT |
PublishAot ist true. |
| AOT-Kompilierung |
RunAOTCompilation ist true. |
| MSTest-Quellgenerierung |
EnableMSTestSourceGeneration ist true. |
| Browser WebAssembly |
TargetPlatformIdentifier ist browser, oder RuntimeIdentifier enthält browser-wasm. |
Regelbeschreibung
Hosteigene Injection von Testklassen verwendet reflexionsbasierte Aktivierung über Microsoft.Extensions.DependencyInjection. Dieser Aktivierungspfad unterstützt weder Native AOT, AOT-Kompilierung, Browser-WebAssembly noch MSTest-Quellgenerierung.
Der Analyzer meldet diesen Fehler bei Aufrufen von AddMSTestTestClassInjection. Außerdem wird die hosteigene Injection durch eine referenzierte Assembly erkannt, die die Registrierung aufzeichnet, auch wenn das Testprojekt die Methode nicht direkt aufruft.
Diese Regel ist von MSTEST0063 getrennt, das Testklassenkonstruktoren überprüft. Ein gültiger Konstruktor macht keine hosteigene Injektion mit einem nicht unterstützten Buildmodus kompatibel. Die experimentelle API erzeugt auch die MSTESTEXP-Diagnose; das Unterdrücken von MSTESTEXP unterdrückt nicht MSTEST0088 oder löst die Inkompatibilität des Buildmodus.
Die Regel bleibt in jedem MSTestAnalysisMode als Fehler aktiviert, einschließlich None.
Wie man Verstöße behebt
Wählen Sie einen der folgenden Ansätze aus:
- Verwenden Sie einen unterstützten Build-Modus, um die Host-Injektion beizubehalten. Deaktivieren Sie die entsprechende AOT- oder Quellgenerierungseinstellung, oder zielen Sie auf eine andere Laufzeit als Browser WebAssembly ab.
- Um den ausgewählten Buildmodus beizubehalten, entfernen Sie die
AddMSTestTestClassInjectionRegistrierung, einschließlich der Registrierungen in referenzierten Hostsetupassemblys. Verwenden Sie Testklassen mit einem öffentlichen parameterlosen Konstruktor oder einem öffentlichen Konstruktor, der nur einen exakten TestContext Parameter akzeptiert.
Es ist keine automatische Codekorrektur verfügbar, da die entsprechende Lösung von den Hosteinrichtungs- und Bereitstellungsanforderungen ihres Testprojekts abhängt.
Wann Fehler unterdrückt werden sollen
Unterdrücken Sie diese Regel nicht. Die Unterdrückung macht die reflexionsbasierte Host-Injektion nicht mit dem ausgewählten Buildmodus kompatibel.
Diagnose unterdrücken
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad auf none in der Konfigurationsdatei fest.
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0088.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.