Назад | Перейти на главную страницу

Почему IIS не может прочитать Web.config в папке, созданной Bash в Windows?

Если я использую bash (из Ubuntu 18.04, работающая через подсистему Windows для Linux), чтобы создать каталог в моем профиле Windows:

$ mkdir /mnt/c/Users/mdmower/source/repos/WebBash

тогда IIS 10 не может читать Web.config прямо в этом каталоге. В качестве минимального примера попробуйте поставить этот простой Web.config в каталог, созданный проводником Windows, а также в другой каталог, созданный bash:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <clear />
    </handlers>
  </system.webServer>
</configuration>

Теперь добавьте веб-сайт в IIS 10, который указывает на каталог, созданный в Windows. После добавления веб-сайта перейдите в раздел Сопоставление обработчиков. Вы должны увидеть, что он очищен (это единственная функция образца Web.config). Измените исходный каталог веб-сайта на каталог, созданный в bash. Раздел Сопоставление обработчиков больше не очищается.

Хотя я обычно предполагаю, что это связано с разрешениями, я не могу найти ни одной разницы в настройках безопасности каждого каталога (Свойства> Безопасность> Дополнительно). Разрешения unix - которые в любом случае не должны иметь значения - также идентичны для двух каталогов (drwxrwxrwx). Get-ItemProperty в PowerShell сообщает, что оба каталога имеют одинаковый режим (d-----) и нет LinkType.

Почему IIS 10 не может читать из каталога, созданного с помощью bash?

Версии программного обеспечения:
Windows 10 x64, версия 1803 (сборка ОС 17134.320)
IIS 10 версии 10.0.17134.1

Кредит для therealkenc в github.com/Microsoft/WSL/issues/3596 за то, что указал мне в правильном направлении. Проблема связана с Чувствительность к регистру для каждого каталога и WSL.

Запросить чувствительный к регистру флаг каталога:

fsutil.exe file queryCaseSensitiveInfo <path>

Установите для каталога флаг с учетом регистра:

fsutil.exe file setCaseSensitiveInfo <path> enable
fsutil.exe file setCaseSensitiveInfo <path> disable

После отключения флага чувствительности к регистру на WebBash каталог, IIS отлично читает Web.config. Это привело меня к мысли о том, что IIS искал строчные web.config. Я снова включил чувствительность к регистру в каталоге WebBash и скопировал Web.config к web.config (да, проводник Windows позволяет мне хранить оба файла в одной папке). IIS читать web.config просто хорошо!