SYSLIB0001: кодировка UTF-7 небезопасна

Кодировка UTF-7 больше не используется широко в приложениях, и многие спецификации теперь запрещают использовать ее при обмене. Кроме того, иногда она служит вектором атаки в приложениях, которые не предусматривают получение данных в этой кодировке. Корпорация Майкрософт предостерегает от использования класса System.Text.UTF7Encoding, так как он не выполняет обнаружение ошибок.

В связи с этим следующие API помечены как устаревшие, начиная с версии .NET 5. При использовании этих API во время компиляции создается предупреждение SYSLIB0001.

Методы обхода проблемы

  • Если вы используете Encoding.UTF7 или UTF7Encoding в своем формате протокола или файла:

    Перейдите на использование Encoding.UTF8 или UTF8Encoding. Кодировка UTF-8 является отраслевым стандартом, поддерживающим различные языки, операционные системы и среды выполнения. Использование UTF-8 упрощает дальнейшее обслуживание кода и улучшает его совместимость с остальной экосистемой.

  • Если вы сравниваете экземпляр Encoding со свойством Encoding.UTF7:

    Вместо этого рекомендуется выполнять проверку по кодовой странице UTF-7 — 65000. Сравнение с кодовой страницей позволяет избежать предупреждения, а также обрабатывать некоторые пограничные случаи, например, когда вызывается new UTF7Encoding() или создается подкласс типа.

    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.
        }
    }
    

Отключение предупреждений

Если необходимо использовать устаревшие API, вы можете отключить предупреждение в коде или в файле проекта.

Чтобы отключить только одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить предупреждение.

// Disable the warning.
#pragma warning disable SYSLIB0001

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

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

Чтобы отключить все SYSLIB0001 предупреждения в проекте, добавьте <NoWarn> свойство в файл проекта.

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

Дополнительные сведения см. в разделе Отключение предупреждений.

См. также