.net - Docker 文件当前工作 > 目录不包含项目或解决方案文件

标签 .net docker .net-core

发出命令时:docker build -t honda-api:build .

Step 7/10 : RUN dotnet restore ---> Running in beedd0465f48 MSBUILD : error MSB1003: Specify a project or solution file. The current working directory does not contain a project or solution file.

文件夹结构如下所示

        Domain/
            Honda.Domain/
                Honda.Domain.csproj
        API/
            Honda.API/
                Honda.API.csproj
        Dockerfile

Docker 文件内容

    FROM mcr.microsoft.com/dotnet/core/sdk:3.1 
    WORKDIR /home/app 
    COPY . . 
    COPY ./Domain/Honda.Domain/Honda.Domain.csproj Domain/
    COPY ./API/Honda.API/Honda.API.csproj API/
    
    RUN dotnet restore 
    RUN dotnet publish ./Honda.API.csproj -o /publish/ 
    WORKDIR /publish ENV ASPNETCORE_URLS=https://+:5001;http://+:5000 
    ENTRYPOINT ["dotnet", "Honda.API.dll"]

最佳答案

如果您没有在根级别复制对所有项目进行分组的 .sln 文件,则需要对每个项目目录运行 dotnet Restore.csproj 文件,即:

RUN dotnet restore ./API
RUN dotnet restore ./API/Honda.API.csproj

但是,我不会遵循您的方法,复制遵循相同项目结构的所有内容,然后使用自定义文件复制 .csproj 文件,最好保持所有内容不变,并遵循 this approach .

类似这样的东西(另外,可能使用运行时镜像来运行应用程序,而不是 sdk 镜像,并使用 Release 配置):

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /app 

# copy csproj and restore as distinct layers
COPY *.sln .
COPY ./Domain/Honda.Domain/*.csproj ./Domain/Honda.Domain/
COPY ./API/Honda.API/*.csproj ./API/Honda.API/
RUN dotnet restore

# copy everything else and build app
COPY . ./
WORKDIR /app/API/Honda.API
RUN dotnet publish -c Release -o publish 

FROM mcr.microsoft.com/dotnet/aspnet:3.1
WORKDIR /app
COPY --from=build /app/API/Honda.API/publish  ./
ENV ASPNETCORE_URLS=https://+:5001;http://+:5000 
ENTRYPOINT ["dotnet", "Honda.API.dll"]

我还没有对此进行测试,但希望您可以对其进行调整并修复它存在的任何小问题。

关于.net - Docker 文件当前工作 > 目录不包含项目或解决方案文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64834706/

相关文章:

c# - 读取带有国际字符的 FTP 文件

php - 从 MAMP 到 Docker 的 Web 开发过渡

c# - SaveChangesAsync 返回异常而不是 0

.net - 为什么要使用List(T).Clear O(N)?

css - Bootstrap glyphicon 内容在 ASP.NET MVC 缩小后被破坏

docker - 如何将文件夹从Docker复制到其他文件夹?

spring-boot - Jprofiler不会在应用程序崩溃时分离

c# - 如何在 Visual Studio 2017 15.6.0 中调试单元测试

asp.net - Apache 网络服务器上的 vNext

c# - 如何使多行文本框不接受 Enter 和 Backspace