Подтвердить что ты не робот

Как запустить ASP.NET MVC6 на IIS без публикации приложения

Я пытаюсь найти способ запуска приложения MVC6 в IIS, но без фактического выполнения публикации. Я не уверен, что это возможно, и если это невозможно в будущем?

Я хотел бы иметь подобное поведение, как в предыдущих версиях, где я мог бы легко отлаживать свой код и вносить изменения во время работы приложения под IIS.

4b9b3361

Ответ 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.