Dotless File Yields 404 Ошибка в IIS

Я успешно использовал файлы .less на моем сервере Dev Cassini (с dotless) в течение нескольких недель, но когда Я публикую на своем локальном сервере IIS 404 ошибок. Прикрепление моего отладчика к IIS не дает исключений. Я также перезапустил свой пул приложений и сервера IIS.

Любые идеи?

Ответ 1

Похоже, что в IIS отсутствует тип mime.

Для IIS7 добавьте следующее к вашему web.config:

<system.webServer>
    <staticContent>
        <mimeMap fileExtension=".less" mimeType="text/css" />
    </staticContent>
</system.webServer>

Для IIS6 вы можете делать (предполагая, что у вас есть доступ администратора RDP):

cscript adsutil.vbs set W3SVC/1/Root/MimeMap ".less, text/css"

Где /1/ - номер IIS сайта.

Ответ 2

Просто добавляя (довольно поздно, я понимаю) свои два бита к этому обсуждению.

Я столкнулся с теми же симптомами, и ранее упомянутое исправление не помогло мне. Однако я все же нашел другую причину этих симптомов и решение для этого.

Ответ 404 в моем случае содержал следующее сообщение в теле ответа:

/* Произошла ошибка. Проконсультируйтесь с журналом или просмотром на локальном компьютере. */

Это, по-видимому, показатель того, что файл был действительно найден и запрос обрабатывался dotLess (сообщение можно найти в исходном коде dotLess), но при обработке запроса произошла ошибка FileNotFoundException.

Я отследил проблему до оператора @import, который ссылался на бездейственный файл, который таинственно не присутствовал на сервере IIS, даже несмотря на то, что он присутствовал на сервере разработки.

Оказалось, что для действия сборки для этого проблемного файла .less был установлен None, а не Content, как и все другие .less файлы в моем проекте.

Итак, следующим логическим вопросом было то, почему на самом деле было неправильное действие сборки?

Ну, я добавил файл как .css файл, а затем решил импортировать его в .less файл и, таким образом, переименовал его в .less(поскольку .css - это подмножество .less, но меньше не импортирует css файлы). Я повторил процесс с новым .css файлом и обнаружил, что проблема воспроизводима.

Кажется, что Visual Studio изменяет действие сборки из Content в None за кулисами как неожиданный побочный эффект переименования .css в .less. Таким образом, переименованный .less файл не будет опубликован на сервере IIS.