【问题标题】:Build docker container from solution with multiple projects从具有多个项目的解决方案构建 docker 容器
【发布时间】:2023-03-17 04:08:02
【问题描述】:

我有一个包含 2 个项目的 .NET Core 项目:

SLN: 
     - Web-API
     - Infrastructure

我正在使用这个 dockerfile 使用 docker 构建它

FROM microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app
COPY . ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/ .
ENTRYPOINT ["dotnet", "/app/Lab/out/API.dll"]

但现在我已经在我的解决方案中创建了一个 Web 应用程序

SLN:
 - Web-API
 - Web-App
 - Infrastructure

突然之间,docker 不再构建了。怎么会? 如何基于相同的解决方案创建两个 docker 容器,一个用于 Web-API,一个用于 Web-app?

来自 Docker 的错误消息

无法从程序集 /usr/share/dotnet/sdk/NuGetFallbackFolder/microsoft.aspnetcore.mvc.razor.viewcompilation/2.0.3/build/netstandard2.0/Microsoft.AspNetCore 加载“GetDotNetHost”任务。 Mvc.Razor.ViewCompilation.Tasks.dll。已加载同名程序集 确认声明正确,程序集及其所有依赖项均可用,并且任务包含实现 Microsoft.Build.Framework.ITask 的公共类。 [/app/Lab/API.csproj]

【问题讨论】:

  • 你是如何构建的?看来这不是 docker 错误
  • 我使用 Docker Build 和上面显示的 Dockerfile 进行构建。如果我删除 Web-API 项目或删除 Web-App 项目,则构建工作正常,但是当我将它们都包含在解决方案中时,构建失败。
  • 如果您在 VS 2017 中使用 docker-compose 文件,请在解决方案目录中打开命令行并尝试 docker-compose down。还可以尝试清理解决方案并重建。根据您的描述,在我看来,您使用的是 VS2017 内置的 docker 支持,它可能很不稳定。尤其是 docker 问问题,VS 不会让你回答。
  • 对不起,这是来自您的 IDE 的东西,错误消息不是来自 docker
  • 我猜,这是来自运行命令RUN dotnet publish -c Release -o out,只是为了找到问题,你可以评论这一行再试一次

标签: c# .net docker .net-core


【解决方案1】:

所以这个问题现在终于解决了。事实证明,当 Razor 视图可用时,编译 .net core 2.0 项目时出现问题:

Razor 视图预编译当前在执行 ASP.NET Core 2.0 中的自包含部署 (SCD)。该功能将 在 2.1 版本发布时可用于 SCD。有关详细信息,请参阅 在 Windows 上为 Linux 交叉编译时查看编译失败。

我需要做的是添加 nuget 包:

Microsoft.AspNetCore.Mvc.Razor.ViewCompilation

在我的项目中使其工作。奇怪的是,它是在 Visual Studio for Mac 中构建的,而不是从命令提示符下构建的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 2018-09-18
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 2011-02-26
    相关资源
    最近更新 更多