【发布时间】: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 个文件夹,就会发生此问题。