2015-12-31 3 views
0

У меня возникли большие проблемы с опубликованной версией моего веб-приложения 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 веб-приложения, похоже, не соблюдает это.

Может ли кто-нибудь сказать мне, почему это неправильно отображается? Заранее спасибо.

+0

Какой версии DNX вы работаете? 'Rc1'? –

+0

Да. Я использую 1.0.0-rc1-update1. Он находится в скрипте сборки: https://github.com/TimothyK/Mvc6ServiceEg/blob/master/BuildScripts/Publish.bat. –

ответ

0

У вас установлены статические файлы Nuget? http://www.nuget.org/packages/Microsoft.AspNet.StaticFiles/

В зависимости от того, какого шаблона вы начали это может или не может быть уже включены (это не с «пустым» один)

+0

Да, установлены статические файлы (https://github.com/TimothyK/Mvc6ServiceEg/blob/master/src/Mvc6ServiceEg/project.json#L13). Он отлично работает со статическими файлами, только из неправильной папки. Это не соответствует папке, указанной в файле host.json. –

Смежные вопросы