SYSLIB0001: Die UTF-7-Codierung ist unsicher.

Die UTF-7-Codierung wird in Anwendungen kaum noch verwendet, und viele Spezifikationen verbieten ihre Verwendung im Austausch. Sie wird zuweilen auch in Anwendungen, die keine UTF-7-codierten Daten erwarten, als Angriffsvektor verwendet. Microsoft warnt vor der Verwendung von System.Text.UTF7Encoding, weil es keine Fehlererkennung bereitstellt.

Aufgrund dessen sind die folgenden APIs ab .NET 5 als veraltet markiert. Die Verwendung dieser APIs ruft zur Kompilierzeit die Warnung SYSLIB0001 hervor.

Problemumgehung

  • Wenn Sie Encoding.UTF7 oder UTF7Encoding in Ihrem eigenen Protokoll oder Dateiformat verwenden, gehen Sie folgendermaßen vor:

    Wechseln Sie zu Encoding.UTF8 oder UTF8Encoding. UTF-8 ist ein Branchenstandard und wird über Sprachen, Betriebssysteme und Runtimes hinweg flächendeckend unterstützt. Die Verwendung von UTF-8 vereinfacht die zukünftige Wartung Ihres Codes und sorgt für mehr Interoperabilität mit dem Rest des Ökosystems.

  • Wenn Sie eine Encoding-Instanz mit Encoding.UTF7 vergleichen, gehen Sie folgendermaßen vor:

    Erwägen Sie stattdessen eine Überprüfung anhand der bekannten UTF-7-Codepage, die 65000 lautet. Durch Vergleichen mit der Codepage vermeiden Sie die Warnung und können außerdem einige Sonderfälle behandeln, wenn beispielsweise jemand new UTF7Encoding() aufgerufen oder Unterklassen des Typs erstellt hat.

    void DoSomething(Encoding enc)
    {
        // Don't perform the check this way.
        // It produces a warning and misses some edge cases.
        if (enc == Encoding.UTF7)
        {
            // Encoding is UTF-7.
        }
    
        // Instead, perform the check this way.
        if (enc != null && enc.CodePage == 65000)
        {
            // Encoding is UTF-7.
        }
    }
    

Unterdrücken einer Warnung

Wenn Sie die veralteten APIs verwenden müssen, können Sie die Warnung im Code oder in Ihrer Projektdatei unterdrücken.

Um nur einen einzelnen Verstoß zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Warnung zu deaktivieren und dann wieder zu aktivieren.

// Disable the warning.
#pragma warning disable SYSLIB0001

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0001

Um alle SYSLIB0001-Warnungen in Ihrem Projekt zu unterdrücken, fügen Sie ihrer Projektdatei eine <NoWarn>-Eigenschaft hinzu.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0001</NoWarn>
  </PropertyGroup>
</Project>

Weitere Informationen finden Sie unter Unterdrücken von Warnungen.

Siehe auch