Устранение рисков. Нормализация путей

Начиная с приложений, ориентированных на .NET Framework 4.6.2, нормализация путей в .NET Framework изменилась.

Что такое нормализация путей?

Нормализация пути подразумевает изменение строки, которая идентифицирует путь или файл, чтобы он соответствовал допустимому пути в целевой операционной системе. Нормализация обычно включает в себя:

  • канонизацию разделителей компонентов и каталогов;

  • применение текущего каталога к относительному пути;

  • оценку относительного каталога (.) или родительского каталога (..) в пути;

  • обрезку указанных символов.

Изменения

Начиная с приложений, ориентированных на .NET Framework 4.6.2, нормализация путей изменилась следующим образом:

  • Среда выполнения перекладывает нормализацию путей на функцию GetFullPathName операционной системы.

  • Нормализация больше не предусматривает обрезки окончания сегментов каталогов (например, пробела в конце имени каталога).

  • Поддержка синтаксиса пути устройства в режиме полного доверия, включая \\.\ и (для API-интерфейсов файлового ввода-вывода в mscorlib.dll) \\?\.

  • Среда выполнения не проверяет пути с синтаксисом устройства.

  • Поддерживается использование синтаксиса устройства для доступа к альтернативным потокам данных.

Воздействие

Для приложений, предназначенных для .NET Framework 4.6.2 или более поздней версии, эти изменения включены по умолчанию. Они должны улучшить производительность, позволяя методам получать доступ к ранее недоступным путям.

Это изменение не влияет на приложения, предназначенные для .NET Framework 4.6.1 и более ранних версий, но работающие на платформе .NET Framework 4.6.2 или более новой версии.

Исправление

Приложения, предназначенные для платформа .NET Framework 4.6.2 или более поздней версии, могут отказаться от этого изменения и использовать устаревшую нормализацию, добавив следующий <раздел среды выполнения> файла конфигурации приложения:

<runtime>  
    <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=true" />
</runtime>  

Приложения, предназначенные для платформа .NET Framework 4.6.1 или более ранней версии, но работающие на платформа .NET Framework 4.6.2 или более поздней версии, могут включить изменения нормализации пути, добавив следующую строку <в раздел среды выполнения> файла конфигурации приложения:

<runtime>  
    <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false" />
</runtime>  

См. также