У меня есть рабочая служба net7, которая работает, как и ожидалось, с реализацией по умолчанию из шаблона.
Я хочу, чтобы эта служба запускала работу и делала что-то в базе данных сервера sql. Это другая библиотека и при запуске workerservice на моем хосте через Visual Studio ide она ни на что не жалуется.
Однако, когда я пытаюсь создать образ, он создается, но когда я запускаю этот образ, я получаю
im-svc exited with code 150
im-svc | No frameworks were found.
im-svc |
im-svc | Learn about framework resolution:
im-svc | https://aka.ms/dotnet/app-launch-failed
im-svc |
im-svc | To install missing framework, download:
im-svc | https://aka.ms/dotnet-core-applaunch?framework=Microsoft.AspNetCore.App&framework_version=7.0.0&arch=x64&rid=debian.11-x64
im-svc | You must install or update .NET to run this application.
im-svc |
im-svc | App: /app/Svc.InventoryManagement.dll
im-svc | Architecture: x64
im-svc | Framework: 'Microsoft.AspNetCore.App', version '7.0.0' (x64)
im-svc | .NET location: /usr/share/dotnet/
im-svc |
im-svc | No frameworks were found.
im-svc |
im-svc | Learn about framework resolution:
im-svc | https://aka.ms/dotnet/app-launch-failed
im-svc |
im-svc | To install missing framework, download:
im-svc | https://aka.ms/dotnet-core-applaunch?framework=Microsoft.AspNetCore.App&framework_version=7.0.0&arch=x64&rid=debian.11-x64
Мало того, я удалил любой код, который может быть выполнен, и оставил только ссылку на .dll и все ту же проблему.
Если я удалю ссылку из этой библиотеки, контейнер, в котором работает эта служба, будет работать, как и ожидалось.
FROM mcr.microsoft.com/dotnet/runtime:7.0 AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["./Svc.InventoryManagement/Svc.InventoryManagement.csproj", "Svc.InventoryManagement/"]
RUN dotnet restore "Svc.InventoryManagement/Svc.InventoryManagement.csproj"
COPY . .
WORKDIR "/src/Svc.InventoryManagement"
RUN dotnet build "Svc.InventoryManagement.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Svc.InventoryManagement.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Svc.InventoryManagement.dll"]
Ссылочная библиотека:
<Project Sdk = "Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include = "Microsoft.EntityFrameworkCore" Version = "7.0.4" />
<PackageReference Include = "Microsoft.EntityFrameworkCore.SqlServer" Version = "7.0.4" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include = "..\lib.Utils\lib.Utils.csproj" />
</ItemGroup>
</Project>
Внутренняя ссылка
<Project Sdk = "Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include = "Microsoft.AspNetCore.App" />
</ItemGroup>
<ItemGroup>
<PackageReference Include = "AutoMapper.Extensions.Microsoft.DependencyInjection" Version = "12.0.0" />
</ItemGroup>
<ItemGroup>
<Folder Include = "EnumExtensions\" />
</ItemGroup>
</Project>
Примечание. У меня есть API-интерфейс net7, который использует ту же библиотеку, и при работе в докере он работает, как и ожидалось.
Кажется, что для вашего "Внутреннего" проекта требуется ASP.NET Core Runtime. Измените FROM mcr.microsoft.com/dotnet/runtime:7.0 AS base
на FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
(@hub.docker) или удалите элемент FrameworkReference
из соответствующего .csproj.