首先,很抱歉,如果我误解了我得到的东西,那么我对Docker完全陌生。
因此,我正在开发一种软​​件,用于将csv文件处理到数据库中,并且一切都在GCP中运行。为了运行我的代码,我可以访问可以使用Docker镜像的Cloud Run。
今天,我添加了3个新文件:

  • 'BusinessLogic / Repository / AcademyRepository.cs'
  • 'BusinessLogic /存储库/接口(interface)/ISourceRepository.cs'
  • 'BusinessLogic / Repository / SourceRepository.cs'

  • 在进行这些修改之前,我必须运行3个命令才能在云运行中发布我的代码:
    dotnet build
    gcloud builds submit --tag gcr.io/myproject/mytag
    gcloud run deploy myservice gcr.io/myproject/mytag--platform managed
    
    但是由于添加了这些文件,因此出现以下错误:
    /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.DefaultItems.targets(295,5):错误NETSDK1022:包含重复的“编译”项。默认情况下,.NET SDK包含项目目录中的“编译”项。您可以从项目文件中删除这些项目,也可以将“EnableDefaultCompileItems”属性设置为“false”(如果要在项目文件中明确包含这些项目)。有关更多信息,请参见https://aka.ms/sdkimplicititems。重复项是:'BusinessLogic / Repository / AcademyRepository.cs'; 'BusinessLogic /存储库/接口(interface)/ISourceRepository.cs'; 'BusinessLogic / Repository / SourceRepository.cs'[/app/MyProject.csproj]
    我在多个线程上看到检查.csproj文件中是否有奇怪的...条目,但在我的里面什么都没有。
    这是我的dockerfile:
    # Use Microsoft's official build .NET image.
    # https://hub.docker.com/_/microsoft-dotnet-core-sdk/
    FROM mcr.microsoft.com/dotnet/core/sdk:3.1-alpine AS build
    WORKDIR /app
    
    # Install production dependencies.
    # Copy csproj and restore as distinct layers.
    COPY *.csproj ./
    RUN dotnet restore
    
    # Copy local code to the container image.
    COPY . ./
    WORKDIR /app
    
    # Build a release artifact.
    RUN dotnet publish -c Release -o out # This step fails
    
    # Use Microsoft's official runtime .NET image.
    # https://hub.docker.com/_/microsoft-dotnet-core-aspnet/
    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-alpine AS runtime
    
    RUN echo 'http://dl-cdn.alpinelinux.org/alpine/v3.8/main' >> /etc/apk/repositories && apk update --no-cache && apk add --no-cache bash libc6-compat=1.1.19-r11
    
    WORKDIR /app
    COPY --from=build /app/out ./
    
    # Run the web service on container startup.
    ENTRYPOINT ["dotnet", "MyDll.dll"]
    
    
    我尝试运行在gcloud builds提交命令之外失败的命令,但未发生任何错误
    如果我删除文件并注释相关代码,问题将消失……但是我有点需要这些文件
    编辑:
    从Visual Studio中编辑csproj文件不会显示实际文件,而是显示修改后的版本。我用记事本编辑了csproj,进行了清理,然后重新编译了项目,但问题仍然存在。

    最佳答案

    找到了解决方法:
    这是我的体系结构的一部分:

    BusinessLogic
    --- Repositories
        --- Interface
    
    问题出在“接口(interface)”文件夹中。通过删除它并在父文件夹(存储库)中添加我的界面,问题消失了。仍然不知道如何解决实际问题

    关于c# - 在Docker构建期间dotnet发布失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63580785/

    10-16 07:10