簡體   English   中英

Docker - 構建 .net 核心可運行項目,引用 .net 框架 4.7.2 項目

[英]Docker - build .net core runnable project referencing .net framework 4.7.2 projects

我有一個解決方案結構,其中我的可運行應用程序是 asp.core webapi (netcoreapp3.1),它引用了用 .net framework 4.7.2 編寫的項目。 我想 dockerize 這個應用程序,我很確定我必須編寫一個自定義 Dockerfile,下載 4.7.2 的 sdk,然后在運行時也是如此,但問題是 - 你將如何處理這個?

編輯:我嘗試了以下 Dockerfile

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-nanoserver-1903 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM microsoft/dotnet-framework:4.7.2-sdk AS dotnet-framework-build
WORKDIR /src
COPY ["ClassLibrary1/ClassLibrary1.csproj", "ClassLibrary1/"]
COPY . .
RUN dotnet build "ClassLibrary1/ClassLibrary1.csproj" -c Release -o /app/build

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-nanoserver-1903 AS dotnet-core-build
WORKDIR /src
COPY ["NetCoreAndFrameworkDocker/NetCoreAndFrameworkDocker.csproj", "NetCoreAndFrameworkDocker/"]
COPY --from=dotnet-framework-build /src .
RUN dotnet restore "NetCoreAndFrameworkDocker/NetCoreAndFrameworkDocker.csproj"
COPY . .
WORKDIR "/src/NetCoreAndFrameworkDocker"
RUN dotnet build "NetCoreAndFrameworkDocker.csproj" -c Release -o /app/build

FROM dotnet-core-build AS publish
RUN dotnet publish "NetCoreAndFrameworkDocker.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "NetCoreAndFrameworkDocker.dll"]

但它仍然在dotnet build NetCoreAndFrameworkDocker.csproj ...上失敗,並出現與以前相同的錯誤。

C:\Program Files\dotnet\sdk\3.1.404\Microsoft.Common.CurrentVersion.targets(1177,5): error MSB3644: The reference assemblies for .NETFramework,Version=v4.7.2 were not found. To resolve this, install the Developer Pack (SDK/Targeting Pack) for this framework version or retarget your application. You can download .NET Framework Developer Packs at https://aka.ms/msbuild/developerpacks [C:\src\ClassLibrary1\ClassLibrary1.csproj]

所以現在的問題是如何在不構建網絡框架項目的情況下構建可運行的應用程序,只使用已經構建的二進制文件?

使用多階段構建。 對於多階段構建,您可以在 Dockerfile 中使用多個 FROM 語句。

https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds

每個 FROM 指令都可以使用不同的基礎,並且它們中的每一個都開始構建的新階段。

您可以選擇性地將工件從一個階段復制到另一個階段,從而在最終圖像中留下您不想要的一切。

# 1st build for .Net framework classlibrary
FROM microsoft/dotnet-framework:4.7.2-sdk AS build
...
...
...
RUN dotnet build "ClassLibrary1.csproj" -c Release

# 2nd build for core app
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

你解決了嗎? 因為我有同樣的問題!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM