.NET System.IO.PathTooLongException из веб-приложения

Windows 10 и Windows Server 2016 представляют решение для традиционной проблемы Long Path. Это простое в реализации решение, и оно очень подробно описано в следующем сообщении в блоге. Выполнение этих шагов успешно работает для консольного / настольного приложения.NET. Однако по какой-то причине при запуске того же кода из веб-приложения ASP.NET я все еще получаю ту же классику System.IO.PathTooLongException исключение.

Код, который выдает исключение:

Directory.CreateDirectory(longPath);

Как я уже упоминал, код успешно работает в консольном приложении, но не работает в веб-приложении ASP.NET. веб-сайт web.config включает в себя следующее:

<?xml version="1.0"?>
<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false"/>
  </runtime>
</configuration>

и файл манифеста приложения, как описано в ссылке на блог выше.

Любая идея приветствуется.

1 ответ

Решение

Благодаря @bradbury9, который указал мне на похожую проблему, я подтвердил, что приложению не удалось загрузить параметры блокировки длинного пути коммутатора во время выполнения. Кроме того, поскольку версия моего приложения основана на.NET 4.5.1, невозможно использовать класс AppContext для ручной установки нужных переключателей программным способом.

Решение:

Для веб-приложения ASP.NET, основанного на.NET 4.6.1 или ниже, убедитесь, что.NET 4.6.2 также установлен на компьютере, на котором выполняется приложение, и добавьте следующий атрибут targetFramework="4.6.2" the httpRuntime конфигурации.

Пример:

<system.web>
    <httpRuntime targetFramework="4.6.2" />
    <compilation targetFramework="4.5.1" />
</system.web>

* Обратите внимание, что Windows, поддерживающая Long Path, например Windows Server 2016 и Windows 10, уже установит.NET 4.6.2.

Другие вопросы по тегам