我的所有项目都是.NET Core SDK 2.2。
我有4个项目。
测试数据TestConsoleTestLogicTestData2。
在启动时,我将控制台设置为启动项目,每个项目都有对每个项目的引用…
为了提高效率,您必须复制所有项目 .csproj 首先是文件,然后恢复以缓存结果。然后复制其他所有内容并发布项目。所以你的Dockerfile看起来很像
.csproj
FROM microsoft/dotnet:sdk AS build-env WORKDIR /app # Copy csproj and restore as distinct layers COPY aspnetapp/aspnetapp.csproj aspnetapp/ COPY TestData/TestData.csproj TestData/ COPY TestLogic/TestLogic.csproj TestLogic/ COPY TestData2/TestData2.csproj TestData2/ RUN dotnet restore ./aspnetapp/aspnetapp.csproj # Copy everything else and build COPY . ./ RUN dotnet publish ./aspnetapp -c Release -o out # Build runtime image FROM microsoft/dotnet:aspnetcore-runtime WORKDIR /app COPY --from=build-env /app/out . ENTRYPOINT ["dotnet", "aspnetapp.dll"]
如果解决方案中有更多项目以减少容器构建时间,则可能需要在还原后显式复制项目。
在我的项目中,我创建了一个创建的工具 COPY 来自命令行的主项目依赖项的指令,以简化过程。
COPY
请尝试以下方法:
FROM microsoft/dotnet:sdk AS build-env WORKDIR /app COPY . ./aspnetapp/ WORKDIR /app/aspnetapp RUN dotnet publish -c Release -o out FROM microsoft/dotnet:aspnetcore-runtime AS runtime WORKDIR /app COPY --from=build-env /app/aspnetapp/src/TestConsole/out ./ ENTRYPOINT ["dotnet", "TestConsole.dll"]