Похоже, что процесс обновления каким-то образом повредил мою установку IIS.Я выполнил обновление Windows, установил все свои инструменты и закрыл свое приложение, и оно прекрасно работает.
Едва быстрое или простое исправление, но я снова заработал через несколько часов.
Я обнаружил реальную проблему и способы ее устранения.
Апрельское обновление Windows добавило изящную функцию, позволяющую включать или отключать чувствительность к регистру для определенных папок.Они также сделали так, чтобы в любой папке, созданной с помощью подсистемы Linux, чувствительность к регистру была включена по умолчанию.При выполнении команды cmd.exe или powershell.exe по умолчанию отключена чувствительность к регистру.
В моем приложении клиентская часть построена с использованием node / webpack и помещена в папку Content приложения .Net.Когда я выполнял обновление Windows, я изначально создавал приложение с помощью cmd.exe, и оно работало нормально.После того, как я включил подсистему Linux и собрал приложение с помощью bash, я снова начал получать 404s для всех файлов в папке Content.ProcMon.exe говорил мне, что файлы, которые не работали, были в верхнем регистре (то есть, если файл - modernizr.min.js, IIS пытался открыть MODERNIZR.MIN.JS).Я не уверен, почему IIS пытался загрузить файл всеми заглавными буквами, кроме того факта, что, когда IIS кэширует файл, он использует все заглавные буквы.
НЕКОТОРЫЕ РЕШЕНИЯ
Вариант # 1: Не используйте подсистему Linux или папки, чувствительные к регистру.
Эта проблема, по-видимому, возникает, только когда IIS обслуживает файлы из папки с включенной чувствительностью к регистру, что происходит по умолчанию с папками, созданными в подсистеме Linux.
Вариант № 2: Установите для Windows по умолчанию для подсистемы Linux использование нечувствительности к регистру.
Отредактируйте /etc/wsl.conf (создайте, если он не существует) и добавьте следующее:
[automount]
options="case=off"
Вам нужно будет выйти из терминала и запустить его снова, чтобы изменения произошли.Для любых папок, ранее созданных в bash, необходимо будет установить свои флаги или удалить их и создать заново.
Опция № 3: Обновить флаг чувствительности к регистру в каждой папке.
Это можно добавить как частьсценарий сборки или выполняется вручную, если вам не нужно многократно это делать.Вам нужно будет установить политику выполнения, чтобы сначала можно было запускать сценарии powershell.
Set-ExecutionPolicy remoteSigned
Сценарий Powershell (FixFolders.ps1):
param (
[string]$root = $( Get-Location )
)
if ( Test-Path $root ) {
$rootPath = $( Get-Item -Path $root )
fsutil file setCaseSensitiveInfo $rootPath disable
foreach ($path in Get-ChildItem -Path $rootPath -Directory -Recurse) {
fsutil file setCaseSensitiveInfo $path.FullName disable
}
}
Этот сценарий отключит чувствительность к региструв указанной папке (или текущей папке) и всех подпапках.
FixFolders.ps1
будет работать в текущей папке и во всех подпапках.
FixFolders.ps1 c:\dev
будет работать на c: \ dev и всехвложенные папки.