Какая версия времени выполнения определяется вашим файлом проекта, поэтому различные среды выполнения могут работать на одном компьютере без каких-либо проблем. Допустим, например, у вас есть две службы: 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, я получил: и посещая service2.lvh.me, я получил:
Как видите, каждое приложение требуется правильная версия платформы, а типы инфраструктуры загружаются из определенных c папок.
Поэтому нет проблем с тем, чтобы разные версии. net core Framework работали на одном компьютере и в Интернете. приложения, работающие поверх указанной c версии на том же IIS.