Может ли приложение ASP. NET Core v3.1 действительно быть автономным? - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть сервер, на котором в настоящее время размещается много служб. net core v2 в IIS.

Мне нужно было создать новую службу. Обычно я просто использовал бы ту среду выполнения, которую установил сервер, но я подумал: «. Net Ядро может развертывать автономные приложения, поэтому я могу иметь сервисы v2 бок о бок с сервисами v3. »

Я беспокоюсь, что ошибся.

Когда я запускаю свое автономное приложение, оно выдает следующую ошибку:

В обработчике "aspNetCore" имеется неисправный модуль "AspNetCoreModuleV2 "в его списке модулей.

Когда я смотрю это , я нахожу , что мне нужно будет установить пакет хостинга. Который, когда вы go переходите на базовый сайт . net, который имеет , он показывает как рекомендуемый метод install для. Net Core (на компьютерах IIS).

Здесь я начинаю волноваться. Я думал, что мне не нужно устанавливать. net Core 3 на моем сервере. Я думал, что смогу запустить автономное приложение.

Я не могу установить. Net Core v3 без проверки того, что все существующие службы, нацеленные на него. Net Core v2 отлично работает на. Net Core v3 runtime.

Итак, похоже, мне придется go понизить мой сервис до v2 (черт, я ненавижу работать до go в обратном направлении.)

Но перед тем, как я это сделаю, я подумал:
В любом случае можно ли разместить на веб-сервере IIS службу Asp. Net Core v3, которая имеет только. Net Core v2 время выполнения на нем?

1 Ответ

1 голос
/ 24 февраля 2020

Какая версия времени выполнения определяется вашим файлом проекта, поэтому различные среды выполнения могут работать на одном компьютере без каких-либо проблем. Допустим, например, у вас есть две службы: Service1 построен с использованием. net core 2.1 и Service2 собран с. net core 3.1. Файлы проекта будут выглядеть так:

Service1.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

Service2.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

После запуска приложения через dotnet run или dotnet ServiceX.dll исполняемый файл dotnet является хостом приложения и выбирает правильное время выполнения на основе метаданных сборки. Используемая среда выполнения фактически записывается в скомпилированную DLL.

Следовательно, приложения 2. * и 3. * могут полностью сосуществовать на одной машине при условии, что установлены необходимые среды выполнения.

Чтение больше здесь: https://docs.microsoft.com/en-us/dotnet/core/versions/selection

Проверьте этот эксперимент. На моей машине установлено следующее: 1) Asp. Net Core Runtime 2.1.14 2) Asp. Net Core Runtime 3.1.2 3) IIS 10.0 4) Asp. Net Core Модуль (установлен с хост-пакетом)

Я создал 2 приложения, по одному для каждой среды выполнения:

dotnet new web -f netcoreapp2.1 -o Service1

и

dotnet new web -f netcoreapp3.1 -o Service2

Затем я изменил оба приложения Startup.cs как это:

    public class Startup
    {
        public void Configure(IApplicationBuilder app)
        {
            app.Run(async context =>
            {
                var framework = Assembly
                    .GetEntryAssembly()?
                    .GetCustomAttribute<TargetFrameworkAttribute>()?
                    .FrameworkName;
                var taskLocation = typeof(Task).Assembly.Location;
                await context.Response.WriteAsync($@"Hello World from {framework}
Location of Task assembly: {taskLocation}.
                ");
            });
        }
    }

Я опубликовал обе службы в выпуске: Service1: C: \ Users \ info \ source \ repos \ Service1> do tnet publi sh - c Release Microsoft (R) Build Engine версия 16.4.0 + e901037fe для. NET Базовое авторское право (C) Microsoft Corporation. Все права защищены.

  Restore completed in 159,32 ms for C:\Users\info\source\repos\Service1\Service1.csproj.
  Service1 -> C:\Users\info\source\repos\Service1\bin\Release\netcoreapp2.1\Service1.dll
  Service1 -> C:\Users\info\source\repos\Service1\bin\Release\netcoreapp2.1\publish\

Service2:

C:\Users\info\source\repos\Service2> dotnet publish -c Release
Microsoft (R) Build Engine version 16.4.0+e901037fe for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 41,98 ms for C:\Users\info\source\repos\Service2\Service2.csproj.
  Service2 -> C:\Users\info\source\repos\Service2\bin\Release\netcoreapp3.1\Service2.dll
  Service2 -> C:\Users\info\source\repos\Service2\bin\Release\netcoreapp3.1\publish\

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

service1.lvh.me >>> C:\Users\info\source\repos\Service1\bin\Release\netcoreapp2.1\publish\

service2.lvh.me >>> C:\Users\info\source\repos\Service2\bin\Release\netcoreapp3.1\publish\

Затем я посетил каждый сайт. Посещая service1.lvh.me, я получил: enter image description here и посещая service2.lvh.me, я получил: enter image description here

Как видите, каждое приложение требуется правильная версия платформы, а типы инфраструктуры загружаются из определенных c папок.

Поэтому нет проблем с тем, чтобы разные версии. net core Framework работали на одном компьютере и в Интернете. приложения, работающие поверх указанной c версии на том же IIS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...