Как запустить asp net приложение локально вне visual studio
Asp Net Core - это как Проктор энд Гэмбл т.е. два в одном флаконе: фрэймворк и Web-сервер, а само веб приложение имеет вид консольного приложения, развертываемого через IWebHost с предварительной настройкой сервисов, миддлваре и т.п. Все относительно просто в случаях, когда разработка идет на машине с установленной Visual Studio. Для запуска веб приложений в Asp Net Core используется веб-сервер Kestrel. И, казалось, бы нет никаких сложностей для запуска веб-приложения на IIS. Но, столкнувшись с такой задачей я набил кучу шишек, о чем и хочу рассказать в этом посте.
Создание Net Core пула и подключение модуля AspNetCore
Как известно в IIS имеются пулы, которые, используются во-первых, для изоляции одних приложений от других, а, во-вторых, для простоты настройки однотипных приложений. И если запустить настройку пула приложения на IIS, то можно увидеть, что Net Core в нем напрочь отсутствует (предварительно я установил Net Core Sdk), всего 3 варианта таргет фрэймворка для пула: 2.0, 4.0 и неуправляемый код. Для Asp Net Core нужно выбрать последний.
Кроме всего этого в Web.config необходимо указать использование этого модуля и путь к целевой сборке (приложению), например, мое приложение - E3App.Web.dll и Web.Config имеет следующий вид:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore
processPath="dotnet"
arguments=".\E3App.Web.dll"
stdoutLogEnabled="true"
stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
Этот файл, как и многое другое, генерируется в процессе публикации проекта (Publish), однако, я не думал, что он играет роль, т.к. он в явном виде отсутствует в проекте. Но он очень важный! Особенно атрибут stdoutLogEnabled, по умолчанию этот атрибут имеет значение false, что для разработчика означает следующее: любое исключение произошедшее при запуске приложение будет "проглочено", а в качестве результата мы увидим на странице что-то вроде: "Оопс, а что-то сломалось". Включаем и идем дальше.
Следующим приколом на пути к запуску приложения стала сама БД: я поставил Sql Server 2012, предполагая, что EF нет дела до версии SQL сервера, но не тут-то было (хотя мне казалось, что ву меня был рабочий проект под 12 версию сервера). Текст исключения в стандартном выводе мне ничего не говорил о том, почему у меня ломается приложение при старте. Однако, подозрительным было то, что при отладке приложение стартовало без каких-либо проблем, а на IIS - ломалось. Тогда я решил заменить 12 SQL Server на SQL Server 2016 и вуаля, текст ошибки стал другим. Теперь приложение жаловалось на то, что нет прав на создании новой БД при подключении к таблице master (тут все тривиально, нужна роль sysadmin для пользователя под которым выполняется подключение). Хотелось бы сделать ремарку о том, что EF работает с БД по парадигме Code First (сам создает скрипт для создания БД, всех таблиц и связей между ними). Тут тоже пришлось помучиться, т.к. можно сделать строку подключения с полным указаниям логина и пароля (в appsettings.json):
Но это не всегда удобно использовать заранее созданную учетную запись, иногда необходимо использовать Windows-аутентификацию, казалось бы просто выдал права (роль sysadmin) своей Windows учетной записи:
но нет в БД, оказывается, EF лезет через другую учетку. Экспериментальным способом включая данную роль у логинов по очереди, определил, что это учетная запись BULTIN\Users (а если посмотреть, кто создал БД - IIS APPPOOL/AspNetCore).
Казалось бы тривиальная задача, но она отняла у меня кучу времени, я убил, наверное, пару дней чистого времени пытаясь понять, что происходит и почему все работает не так, как нужно. Надеюсь, что этот пост поможет тем, кто столкнулся с такой же проблемой: деплоя на IIS Asp Net Core веб приложения.
Почему в моей папке bin нет exe-файла? Могу я его создать? Также что с файлами DLL?
2 ответа
Visual Studio предоставляет встроенный веб-сервер для отладки. Вне Visual Studio вы развертываете веб-приложение в экземпляре IIS, а затем можете получить доступ к приложению, указав в браузере этот экземпляр IIS.
Он может быть на том же физическом компьютере, что и браузер, нет никаких ограничений, что «веб-сервер» должен быть физически отдельным «серверным» компьютером. Но вам действительно нужен запущенный где-то «веб-сервер» для развертывания на нем приложения.
Теперь мне нужно запустить свой веб-сайт в браузере.
Браузер не «запускает» приложение. Браузер подключается к веб-серверу, на котором размещено приложение.
Я не хочу использовать подход IIS, есть ли альтернатива?
Помимо IIS, вы можете использовать и другие веб-серверы (например, Apache с mod_mono, возможно), хотя я полагаю, что в этом случае IIS будет самым простым и понятным.
Почему в моей папке bin нет exe-файла?
Потому что вы создали веб-приложение, а не настольное приложение.
Нет. По крайней мере, не так, как ты думаешь.
Там хранится скомпилированный код. Веб-сервер будет использовать их для вызова функций в вашем приложении. Действительно, настольное приложение также могло бы использовать их для вызова той же функции.
Я не хочу использовать подход IIS, есть ли альтернатива?
По большому счету, вы запускаете exe-файл на сервере. Затем клиентский браузер обращается к приложению.
Как запустить ASP приложение без VS
Можно ли, и как, запустить из ASP приложение на сервере ?
Можно ли ,и как, запустить из ASP приложение на сервере ?
Приложение со всеми библиотеками, или как запустить приложение без установленного FW
Извините, если для профессионалов эта тема покажется уже заезженной, но я не нашла решения в.
Как запустить приложение на C++ без установки C++?
Если написать какую-то прогу на с++ builder 6, скомпилить её в exe. А потом запустить на другом.
Почему в папке bin нет файла exe? Могу ли я создать его? Также что с файлами dll?
Visual Studio предоставляет встроенный веб-сервер для использования для отладки. Вне Visual Studio вы развертываете веб-приложение на экземпляр IIS и можете получить доступ к приложению, указав свой браузер на этот экземпляр IIS.
Он может быть на той же физической машине, что и браузер, нет никаких ограничений на то, что "веб-сервер" должен быть физически отделенным "сервером". Но вам нужен "веб-сервер", который где-то работает, чтобы развернуть приложение к нему.
Теперь я должен иметь возможность запускать свой веб-сайт в браузере
Браузер не запускает приложение. Браузер подключается к веб-серверу, на котором размещается приложение.
Я не хочу использовать подход IIS и альтернативен?
Есть и другие веб-серверы, которые вы можете использовать помимо IIS (например, Apache с mod_mono), хотя я предполагаю, что IIS будет самым простым и простым в этом случае.
Почему в папке bin нет файла exe?
Потому что вы создали веб-приложение, а не настольное приложение.
Нет. По крайней мере, не так, как вы думаете.
Это где скомпилированный код хранится. Веб-сервер будет использовать их для вызова функций в вашем приложении. Действительно, настольное приложение также будет использовать их для вызова той же функциональности.
Я понимаю, что вопрос может вам показаться глупым, но я начинающий и не смог найти информацию в интернете.
Ответы (4 шт):
После того как он будет установлен на нужном компьютере, который будет выступать в роли веб сервера, сервер нужно будет сконфигурировать, создать в нем сайт, и затем опубликовать проект.
Почитать для ознакомления:
Информации достаточно много, прикрепил вам для ознакомления несколько ссылок. Ну и в качестве бонусной ссылки рекомендую к ознакомлению вот эту:
Исходный код компилируется в исполняемые файлы. Вы можете сами посмотреть, что получится в итоге, если "опубликуете" проект.
Так как это веб-приложение, то для его работы нужен сервер. VS использует IIS сервер, так что и вы можете попробовать развернуть проект на IIS.
- Статические файлы (обычно это папки Content, Scripts и Views - но могут быть любые)
- Папка bin (тот самый результат компиляции)
- Файл web.config
Также понадобятся сервер IIS. Это компонент винды, ставится (на восьмерке, в других виндах может называться по-другому) через "Панель управления" - "Программы и компоненты" - "Включение и отключение компонентов Windows". На серверных виндах нужна роль "Веб-сервер" или "Сервер приложений", точно не помню.
Все эти файлы надо перенести в папку c:\inetpub, ее подпапку - или в любое другое место.
- Если вы копировали файлы в корень inetpub - ваш сайт уже может работать.
- Если вы создали вложенную папку - вам надо зайти в настройки IIS, найти там эту папку, нажать на нее правой кнопкой и выбрать пункт "Преобразовать в приложение".
- Если вы положили файлу куда-то еще, вам надо создать сайт или приложение, и указать для него виртуальный и физический пути (виртуальный путь - это адрес сайта, физический - это где лежат его файлы).
Имеется способ автоматически скопировать в выходную папку дерево необходимых веб-серверу файлов, чтобы не искать их вручную. Для этого надо построить проект из командной строки через msbuild с ключами "/t:PipelineCopyAllFilesToOneFolderForMsdeploy /p:Configuration=Release /p:WPPAllFilesInSingleFolder=путь\к\выходной\папке"
Также можно получить архив с этими файлами, пригодный для развертывания через msdeploy (службу управления IIS) - для этого надо указать ключи "/t:Package /p:Configuration=Release /p:PackageLocation=путь\к\выходной\папке"
Кроме того, если просто собрать проект с ключом "/t:Package" - то все файлы в одном месте можно будет найти по пути obj*\Package\PackageTmp
Также набор файлов для развертывания можно получить через саму студию, нажав на проект правой кнопкой и выбрав пункт "Публикация. " ("Publish. ")
Azure PowerShell — рекомендуемое средство для создания приложений на платформе размещение Windows. Для создания приложений в Linux используйте другой инструмент, например Azure CLI
Предварительные требования
Если у вас уже установлена версия Visual Studio 2022:
- Установите последние обновления для Visual Studio, выбрав Справка > Проверить обновления.
- Добавьте рабочую нагрузку, выбрав Инструменты > Получить средства и компоненты.
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно. .
- Расширение Azure Tools.
Откройте Visual Studio и выберите Создать проект.
В разделе Настройка нового проекта присвойте приложению имя MyFirstAzureWebApp и щелкните Далее.
Для параметра Тип проверки подлинности укажите значение Нет. Щелкните Создать.
В меню Visual Studio выберите Отладка > Запустить без отладки, чтобы запустить приложение локально.
Откройте Visual Studio и выберите Создать проект.
В окне Настройка нового проекта присвойте приложению имя MyFirstAzureWebApp и щелкните Создать.
Выберите шаблон MVC .
Убедитесь, что для параметра Проверка подлинности задано значение Без проверки подлинности. Щелкните Создать.
В меню Visual Studio выберите Отладка > Запустить без отладки, чтобы запустить приложение локально.
В окне терминала создайте новую папку с именем MyFirstAzureWebApp и откройте ее в Visual Studio Code.
в Visual Studio Code откройте окно терминала, введя Ctrl + ` .
В окне Терминал Visual Studio Code запустите приложение в локальной среде с помощью команды dotnet run .
В том же сеансе терминала запустите приложение локально с помощью команды dotnet run .
Публикация веб-приложения
Прежде чем опубликовать веб-приложение, следует создать и настроить новую Службу приложений, в которой вы сможете опубликовать это приложение.
В процессе настройки Службы приложений вы создадите следующее:
- Новая группа ресурсов для всех ресурсов Azure, которые потребуются для этой службы.
- Новый план размещения, который позволяет определить расположение, размер и функции фермы веб-серверов для размещения приложения.
Выполните следующие действия, чтобы создать Службу приложений и опубликовать свой проект:
Щелкните правой кнопкой мыши проект MyFirstAzureWebApp в Обозревателе решений и выберите Опубликовать.
В разделе Публикация выберите Azure и нажмите кнопку Далее.
Выберите Указанный целевой объект: Служба приложений Azure (Linux) или Служба приложений Azure (Windows) . Затем щелкните Далее.
Доступные параметры зависят от того, вошли ли вы в Azure и есть ли у вас учетная запись Visual Studio, связанная с учетной записью Azure. Выберите Добавить учетную запись или Войти, чтобы войти в подписку Azure. Если вы уже вошли, выберите нужную учетную запись.
Справа от списка Экземпляры Службы приложений выберите + .
В разделе Группа ресурсов выберите Создать. В разделе Новое имя группы ресурсов введите myResourceGroup и щелкните ОК.
В разделе План размещения щелкните Создать.
В диалоговом окне План размещения. Создать новый введите значения, указанные в следующей таблице.
Параметр | Рекомендуемое значение | Описание |
---|---|---|
План размещения | MyFirstAzureWebAppPlan | Имя плана службы приложений. |
Расположение | Западная Европа | Центр обработки данных, где размещается веб-приложение. |
Размер | Бесплатный | Ценовая категория определяет возможности размещения. |
Выберите Создать, чтобы создать ресурсы Azure.
В диалоговом окне Публикация убедитесь, что в качестве экземпляра Службы приложений выбрано новое приложение Службы приложений, а затем щелкните Готово. Visual Studio создаст профиль публикации для выбранного приложения Службы приложений.
Visual Studio создает, упаковывает и публикует приложение в Azure, а затем запускает его в браузере по умолчанию.
В Visual Studio Code откройте раздел Палитра команд и нажмите клавиши CTRL + SHIFT + P .
Ответьте на запросы следующим образом:
Во всплывающем окне Всегда развертывать рабочую область MyFirstAzureWebApp в <app-name> выберите Да. Таким образом, пока вы находитесь в той же рабочей области, Visual Studio Code будет каждый раз выполнять развертывание в одном и том же приложении Службы приложений.
Когда публикация завершится, щелкните Обзор веб-сайта в открывшемся уведомлении и нажмите кнопку Открыть при появлении запроса.
Войдите в учетную запись Azure с помощью команды az login и выполните следующий запрос:
Разверните код в локальном каталоге MyFirstAzureWebApp с помощью команды az webapp up :
Откройте браузер и перейдите по этому URL-адресу:
Azure PowerShell — рекомендуемое средство для создания приложений на платформе размещение Windows. Для создания приложений в Linux используйте другое средство, например Azure CLI
Войдите в учетную запись Azure с помощью команды Connect-AzAccount и выполните следующий запрос:
Создайте приложение с помощью команды New-AzWebApp:
- Замените <app-name> именем, уникальным для всех регионов Azure (допустимыми символами являются a-z , 0-9 и - ). Рекомендуется использовать сочетание названия компании и идентификатора приложения.
- При необходимости вы можете использовать параметр -Location <location-name> , где <location-name> является доступным регионом Azure. Список допустимых регионов для учетной записи Azure можно получить, выполнив команду Get-AzLocation .
Выполнение этой команды может занять несколько минут. При выполнении создается группа ресурсов, план службы приложений и ресурс Службы приложений.
В корневой папке приложения подготовьте свое локальное приложение MyFirstAzureWebApp к развертыванию, выполнив команду dotnet publish :
Перейдите в каталог версии и создайте ZIP-файл из содержимого:
Опубликуйте ZIP-файл в приложении Azure с помощью команды Publish-AzWebApp:
-ArchivePath нужно предоставить полный путь к ZIP-файлу.
Откройте браузер и перейдите по этому URL-адресу:
Обновление и повторное развертывание приложения
Чтобы обновить и повторно развернуть веб-приложение, сделайте следующее:
В Обозревателе решений откройте файл Index.cshtml вашего проекта.
Замените первый элемент <div> следующим кодом:
Чтобы выполнить повторное развертывание в Azure, щелкните правой кнопкой мыши проект MyFirstAzureWebApp в Обозревателе решений, а затем выберите Опубликовать.
На странице Публикация со сводными сведениями щелкните Опубликовать.
По завершении публикации Visual Studio открывает в браузере страницу с URL-адресом веб-приложения.
Замените первый элемент <div> следующим кодом:
В Visual Studio Code откройте раздел Палитра команд и нажмите клавиши CTRL + SHIFT + P .
Щелкните Развернуть при появлении запроса.
Когда публикация завершится, щелкните Обзор веб-сайта в открывшемся уведомлении и нажмите кнопку Открыть при появлении запроса.
В локальном каталоге выберите файл Index.cshtml. Замените первый элемент <div> следующим кодом:
Сохраните изменения, а затем повторно разверните приложение с помощью команды az webapp up .
Эта команда использует значения, которые кэшируются локально в файле .azure/config, включая имя приложения, группу ресурсов и план службы приложений.
После завершения развертывания переключитесь в окно браузера, открытое на этапе перехода в приложение, и щелкните "Обновить".
В локальном каталоге выберите файл Index.cshtml. Замените первый элемент <div> следующим кодом:
В корневой папке приложения подготовьте свое локальное приложение MyFirstAzureWebApp к развертыванию, выполнив команду dotnet publish :
Перейдите в каталог версии и создайте ZIP-файл из содержимого:
Опубликуйте ZIP-файл в приложении Azure с помощью команды Publish-AzWebApp:
-ArchivePath нужно предоставить полный путь к ZIP-файлу.
После завершения развертывания переключитесь в окно браузера, открытое на этапе перехода в приложение, и щелкните "Обновить".
Управление приложением Azure
Чтобы управлять веб-приложением, перейдите на портал Azure, найдите и выберите Службы приложений.
На странице Службы приложений выберите имя веб-приложения.
На странице Обзор для веб-приложения вы можете выполнять базовые задачи управления: просмотр, завершение, запуск, перезагрузку и удаление. В меню слева есть дополнительные страницы для настройки приложения.
Очистка ресурсов
На предыдущем шаге вы создали ресурсы Azure в группе ресурсов. Если вы не планируете использовать эти ресурсы в будущем, вы можете удалить их, удалив саму группу ресурсов.
- На странице Обзор веб-приложения на портале Azure щелкните ссылку myResourceGroup в разделе Группы ресурсов.
- На странице группы ресурсов проверьте, действительно ли требуется удалить перечисленные ресурсы.
- Выберите Удалить, введите myResourceGroup в текстовое поле, после чего щелкните Удалить.
Очистка ресурсов
На предыдущем шаге вы создали ресурсы Azure в группе ресурсов. Если вы не планируете использовать эти ресурсы в будущем, вы можете удалить их, удалив саму группу ресурсов.
- На странице Обзор веб-приложения на портале Azure щелкните ссылку myResourceGroup в разделе Группы ресурсов.
- На странице группы ресурсов проверьте, действительно ли требуется удалить перечисленные ресурсы.
- Выберите Удалить, введите myResourceGroup в текстовое поле, после чего щелкните Удалить.
Очистка ресурсов
На предыдущем шаге вы создали ресурсы Azure в группе ресурсов. Если эти ресурсы вам не понадобятся в будущем, вы можете удалить группу ресурсов, выполнив следующую команду в Cloud Shell:
Ее выполнение может занять до минуты.
Очистка ресурсов
На предыдущем шаге вы создали ресурсы Azure в группе ресурсов. Если эти ресурсы вам не понадобятся в будущем, удалите группу ресурсов, выполнив следующую команду PowerShell:
Ее выполнение может занять до минуты.
Дальнейшие действия
Читайте также: