【问题标题】:dotnet publish fails during docker builddocker build 期间 dotnet 发布失败
【发布时间】:2020-08-25 14:13:04
【问题描述】:

首先,如果我误解了我得到的内容,我很抱歉,我对 Docker 完全陌生。

所以我正在开发一个将 csv 文件处理成数据库的软件,并且一切都在 GCP 中运行。为了运行我的代码,我可以访问可以使用 Docker 映像的 Cloud Run。

今天我添加了 3 个新文件:

  • 'BusinessLogic/Repository/AcademyRepository.cs'
  • 'BusinessLogic/Repository/Interfaces/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): error NETSDK1022: Duplicate 'Compile' items were包括。默认情况下,.NET SDK 包含项目目录中的“编译”项。您可以从项目文件中删除这些项目,或者如果您想将它们明确包含在项目文件中,则将“EnableDefaultCompileItems”属性设置为“false”。有关详细信息,请参阅https://aka.ms/sdkimplicititems。重复的项目是:'BusinessLogic/Repository/AcademyRepository.cs'; 'BusinessLogic/Repository/Interfaces/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 submit 命令之外运行失败的命令,但没有发生任何错误

如果我删除文件并注释相关代码,问题就会消失......但我有点需要这些文件

编辑: 从 Visual Studio 编辑 csproj 文件不会显示实际文件,它会显示修改后的版本。我用记事本编辑了csproj,清理然后重新编译了项目,但问题仍然存在。

【问题讨论】:

  • 您的错误表明源文件重复
  • 从我在其他主题和网站上发现的情况来看,通常是这样,但是我的csproj中应该有一个标签,但是当我编辑我的csproj文件时,我只能找到掘金参考
  • 我遇到了同样的问题,除了 nuget 包之外,我的 csproj 中也没有任何包含。我还可以在本地创建和运行 docker 映像(带有 WSL 2 的 Win 10)而不会出现任何错误。我也在使用 .net 5.0,所以问题在 .net 5.0 sdk 中没有得到解决。
  • 经过进一步调查,我的问题似乎与我的项目文件夹结构的深度有关。一旦我深入 3 个文件夹,就会发生此问题。

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


【解决方案1】:

找到了解决方法:

这是我的架构的一部分:

BusinessLogic
--- Repositories
    --- Interface

问题出在“Interface”文件夹中。通过删除它并将我的接口添加到父文件夹(存储库)中,问题就消失了。仍然不知道如何解决真正的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 2017-07-09
    • 2021-04-26
    • 2020-09-07
    • 1970-01-01
    • 2019-03-28
    相关资源
    最近更新 更多