У меня возникли большие проблемы с опубликованной версией моего веб-приложения MVC 6. Он отлично работает при работе с Visual Studio, но при запуске из опубликованного вывода статические файлы не читаются из папки wwwroot.Публикация ASP.NET 5 не поддерживает файлы из wwwroot
Я знаю, что я должен включать примеры кода с моим вопросом. Это много кода и включает сравнение моего решения в Visual Studio с опубликованным выпуском. Для моего примера кода я создал репозиторий GitHub, который воспроизводит это: https://github.com/TimothyK/Mvc6ServiceEg.
Проект в основном File-New Project для веб-приложения ASP.NET 5. Однако, в конечном итоге, я хочу, чтобы мой проект работал как самостоятельная служба Windows. Таким образом, в этом проекте есть немного кода, который в конечном итоге позволит ему запускаться как служба Windows и вручную вызывает класс запуска по умолчанию. Этот код был извлечен из этой статьи: http://taskmatics.com/blog/host-asp-net-in-a-windows-service/. Код создает команду DNX под названием «run» в дополнение к команде «web» по умолчанию.
В соответствии с файлом readme.md файл BuildScripts \ Publish.bat создаст автономную папку для запуска проекта. После запуска скрипта Publish.bat сам размещенный веб-сервер можно запустить с помощью C: \ publish \ Mvc6ServiceEg \ approot \ run.cmd.
При запуске таким образом статические файлы не подаются с веб-сервера, как ожидалось. Вы можете воспроизвести это, просмотрев до http://localhost:5000/images/Banner-02-VS.png. Это работает отлично, если вы запускаете веб-приложение из Visual Studio, но получаете ошибку 404 при запуске из опубликованного файла run.cmd.
Я выяснил, что происходит не так, но я не знаю, как это исправить. Причина в том, что веб-сервер не отображает правильную папку. Статические файлы должны размещаться в папке C: \ publish \ Mvc6ServiceEg \ wwwroot, которая содержит файлы изображений \ Banner-02-VS.png.
Веб-сервер фактически размещает статические файлы из C: \ publishMvc6ServiceEg \ approot \ packages \ Mvc6ServiceEg \ 1.0.0 \ root. Вы можете доказать это, просмотрев http://localhost:5000/Project_Readme.html, который существует в этой папке.
В опубликованном выпуске есть файл host.json, который должен сообщать веб-серверу, что webroot является папкой wwwroot. Однако путь выполнения run.cmd веб-приложения, похоже, не соблюдает это.
Может ли кто-нибудь сказать мне, почему это неправильно отображается? Заранее спасибо.
Какой версии DNX вы работаете? 'Rc1'? –
Да. Я использую 1.0.0-rc1-update1. Он находится в скрипте сборки: https://github.com/TimothyK/Mvc6ServiceEg/blob/master/BuildScripts/Publish.bat. –