Как запустить ASP.NET MVC6 на IIS без публикации приложения
Я пытаюсь найти способ запуска приложения MVC6 в IIS, но без фактического выполнения публикации. Я не уверен, что это возможно, и если это невозможно в будущем?
Я хотел бы иметь подобное поведение, как в предыдущих версиях, где я мог бы легко отлаживать свой код и вносить изменения во время работы приложения под IIS.
Ответы
Ответ 1
Это возможно. В корне вашего проекта (каталог project.json) запустите следующую команду:
dnu publish --runtime active --out bin/artifacts
Как только публикация будет выполнена, у вас есть материал в папке bin/artifacts
. Point IIS в папку bin/artifacts/wwwroot
, которую мы только что создали, и она должна работать. Имейте в виду, что вам по крайней мере нужна .NET 4.5.1.
Ответ 2
Из вашего исходного вопроса (выделено мной):
Я пытаюсь найти способ запуска приложения MVC6 на IIS , но без фактического выполнения публикации.
Из вашего комментария к tugberk (выделено мной):
Прямо сейчас, когда я делаю изменения, мне нужно вызвать эту команду dnu publish, чтобы увидеть мои изменения в IIS. Я хотел бы видеть их только путем перестройки.
Ответ и причины
Вам нужно опубликовать. Есть как минимум две причины:
- IIS необходимо построить вывод и
- IIS необходим файл web.config.
IIS может потребоваться еще несколько вещей, о которых я не знаю. Итак, вам нужно будет опубликовать. Это не имеет большого значения: после первоначальной настройки публикация не занимает много времени, чем перестраивает.
Зачем вам нужно публиковать?
В Visual Studio 2015, если вы создадите веб-приложение ASP.NET 5, в вашем каталоге решений не будет выхода сборки, и IIS должен построить выход. По умолчанию Roslyn выполняет только анализ кода без испускания сборки.
Вы можете изменить это значение по умолчанию, чтобы Roslyn выдавал вывод сборки, но это не приведет к созданию файла web.config, который нужен IIS. Перейдя в View
> Project Properties
> Build
и проверив "Произвести выходы при сборке", Roslyn выдает вывод в каталог artifacts
. Например:
artifacts/bin/MyWebApp/Debug/MyWebApp.1.0.0.nupkg
artifacts/bin/MyWebApp/Debug/MyWebApp.1.0.0.symbols.nupkg
artifacts/bin/MyWebApp/Debug/app/project.json
artifacts/bin/MyWebApp/Debug/dnx451/MyWebApp.dll
artifacts/bin/MyWebApp/Debug/dnx451/MyWebApp.pdb
artifacts/bin/MyWebApp/Debug/dnx451/MyWebApp.xml
artifacts/bin/MyWebApp/Debug/dnxcore50/MyWebApp.dll
artifacts/bin/MyWebApp/Debug/dnxcore50/MyWebApp.pdb
artifacts/bin/MyWebApp/Debug/dnxcore50/MyWebApp.xml
Если вы укажете IIS в каталоге artifacts
, теперь у вас будет проблема не иметь ни wwwroot
, ни web.config
.
Итак, вам нужно опубликовать (или разработать какое-то другое запутанное решение) для IIS для работы с ASP.NET. 5. Если вы хотите публиковать из Visual Studio на локальный веб-сайт IIS, существует некоторая настройка. После установки onetime вы можете вносить изменения в свой код и публиковать в два клика. Здесь исходная настройка:
- Щелкните правой кнопкой мыши проект.
- Выберите "Опубликовать".
- Выберите "Файловая система" и добавьте имя профиля (например, inetpub).
- Измените целевое местоположение на C:\inetpub\MyWebApp
- В настройках выберите соответствующие настройки. Например.
- Конфигурация: Отладка
- Целевая версия DNX:
dnx-clr-win-x64.1.0.0-beta4
- Нажмите "Опубликовать".
Как только публикация завершена, укажите IIS в C:\inetpub\MyWebApp\wwwroot
, и вы сможете перейти на веб-сайт. Кроме того, теперь вы можете изменить свой код, опубликовать за два клика и обновить свой сайт IIS, чтобы увидеть изменения.
Некоторые gotchas
-
Если вы решите опубликовать в inetpub
, обязательно запустите Visual Studio как администратор, чтобы не получить недостаточную ошибку разрешений.
-
Если вы согласны с местоположением публикации по умолчанию (вместо использования inetpub, как показано выше), обратите внимание на слишком длинные ошибки пути (например, > 260 символов.)
Заключительные мысли
Почему бы не использовать Visual Studio и Debug
> Start without debugging
во время разработки. С Roslyn и Visual Studio 2015 вы можете вносить изменения в код и просматривать эти изменения, обновляя веб-браузер. Никакой перестройки не требуется. Это гораздо более приятный рабочий процесс.
Ответ 3
Я предполагаю, что это разработка по вопросу IIS. Это выполнимо, но это требует некоторой работы. Причина, по которой IIS не работает из коробки без публикации, заключается в том, что по умолчанию в пулах приложений нет настроек профиля пользователя. Самое простое, что вы можете сделать, - включить профиль пользователя в пуле приложений, который позволит IIS найти время выполнения в папке профиля пользователя. Кроме того, вам требуется, чтобы web.config указывал, какую версию среды выполнения использовать (dnu publish генерирует это для вас, поэтому, если вы хотите, вы можете опубликовать и скопировать папку времени исполнения). После этого указание IIS на wwwroot должно просто работать (при условии, что вы настроили правильный web.config с правильной продолжительностью выполнения и правильной битностью).
Вам также нужен правильный файл AspNet.Loader.dll в папке bin. Если вы используете визуальную студию, она скопирует ее в нужное место.
Ответ 4
На основе ответа davidfowl я запускал ASP.NET MVC6 в IIS без публикации приложения. Но я все еще не могу начать отлаживать его с помощью F5 (только подключаясь к w3wp.exe).
В любом случае, я надеюсь, что это будет полезно:
- В корне проекта добавьте каталог "packages" (или назовите его как хотите).
- В файле global.json добавьте "пакеты": "пакеты". например:.
{
"projects": [
"src",
"test",
"wrap"
],
"sdk": {
"version": "1.0.0-beta4"
},
"packages": "packages" // <--
}
Пакеты будут теперь сохранены в этом каталоге.
- Создайте каталог "runtimes" в корне вашего проекта.
- Скопировать время выполнения из% userprofile%/. dnx/runtimes в /path/to/your/project/runtimes
- Создайте web.config в проекте wwwroot. например:.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="bootstrapper-version" value="1.0.0-beta4" />
<add key="dnx-version" value="1.0.0-beta4" />
<add key="dnx-clr" value="clr" />
<add key="dnx-app-base" value=".." />
<add key="runtime-path" value="../../../runtimes" />
</appSettings>
</configuration>
- Создайте веб-приложение в IIS и укажите его на свой проект wwwroot.
Структура моего проекта:
Projects/
vNext/
packages/
runtimes/
dnx-clr-win-x64.1.0.0-beta4/
dnx-clr-win-x86.1.0.0-beta4/
...
src/
vNext/
wwwroot/ <-- IIS web application points here
web.config
...
project.json
...
global.json
vNext.sln
...
После этого вы сможете подключиться к w3wp.exe и отладить приложение под управлением IIS.