Freigeben über


Warnung CA1417: OutAttribute für Zeichenfolgenparameter für P/Invoke

Die .NET Code Analyzer-Regel CA1417 ist standardmäßig ab .NET 5 aktiviert. Sie erzeugt eine Buildwarnung für alle Methodendefinitionen für Plattformaufrufe (P/Invoke), bei denen ein String-Parameter im Wert übergeben und mit OutAttribute gekennzeichnet wird.

Änderungsbeschreibung

Ab .NET 5 enthält das .NET SDK .NET Source Code Analyzers. Einige dieser Regeln sind standardmäßig aktiviert, einschließlich CA1417. Wenn Ihr Projekt Code enthält, der gegen diese Regel verstößt und für die Behandlung von Warnungen als Fehler konfiguriert ist, kann diese Änderung ihren Build unterbrechen.

Regel CA1417 kennzeichnet P/ Invoke-Methodendefinitionen, bei denen ein String Parameter mit dem OutAttribute Attribut gekennzeichnet und nach Wert übergeben wird. Beispiel:

[DllImport("MyLibrary")]
private static extern void PIMethod([Out] string s);

Die .NET-Laufzeit verwaltet eine Tabelle, die als Internpool bezeichnet wird, die einen einzelnen Verweis auf jede eindeutige Literalzeichenfolge in einem Programm enthält. Wenn eine internierte Zeichenfolge, die mit OutAttribute markiert ist, als Wert an eine P/Invoke-Methode übergeben wird, kann die Laufzeitumgebung destabilisiert werden. Weitere Informationen zur String-Internierung sehen Sie in den Anmerkungen zu String.Intern(String).

Eingeführte Version

5.0

  • Wenn Sie geänderte String-Daten zurück an den Aufrufer übertragen müssen, übergeben Sie stattdessen die Zeichenfolge als Referenz.

    [DllImport("MyLibrary")]
    private static extern void PIMethod(out string s);
    
  • Wenn Sie keine geänderten Zeichenfolgendaten zurück an den Aufrufer marshallen müssen, entfernen Sie einfach die OutAttribute.

    [DllImport("MyLibrary")]
    private static extern void PIMethod(string s);
    

    Weitere Informationen finden Sie unter CA1417.

  • Um die Codeanalyse vollständig zu deaktivieren, legen Sie `EnableNETAnalyzers` auf `false` in Ihrer Projektdatei fest. Weitere Informationen finden Sie unter EnableNETAnalyzers.

Betroffene APIs

Kann nicht über API-Analyse erkannt werden.