C# 为什么我的项目是用dotnet编译器构建的,而不是docker编写的?

C# 为什么我的项目是用dotnet编译器构建的,而不是docker编写的?,c#,docker,.net-core,docker-compose,stylecop,C#,Docker,.net Core,Docker Compose,Stylecop,我有一个.NETCore2.2解决方案,它可以在VisualStudio中使用dotnet命令行很好地构建,但在使用DockerCompose构建时会抛出StyleCop构建错误 我正在使用最新的StyleCop.Analyzers nuget包。我在解决方案的根目录中有一个共享规则集,我的所有项目都引用该规则集进行所有构建配置。我在解决方案的根目录中使用一个stylecop.json配置文件,所有项目都链接到该文件。stylecop.json文件的构建操作都设置为“C#analyzer附加文件

我有一个.NETCore2.2解决方案,它可以在VisualStudio中使用dotnet命令行很好地构建,但在使用DockerCompose构建时会抛出StyleCop构建错误

我正在使用最新的StyleCop.Analyzers nuget包。我在解决方案的根目录中有一个共享规则集,我的所有项目都引用该规则集进行所有构建配置。我在解决方案的根目录中使用一个stylecop.json配置文件,所有项目都链接到该文件。stylecop.json文件的构建操作都设置为“C#analyzer附加文件”。据我所知,stylecop配置正确

下面是(我相信)有问题的.csproj文件的相关部分


..\Shared.ruleset
netcoreapp2.2
真的
最新的
Linux
全部的
运行时间;建设;本地人;内容文件;分析仪;可传递的
以下是我针对问题项目的Dockerfile:

FROM mcr.microsoft.com/dotnet/core/runtime:2.2-stretch-slim AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY ["Subscriber/Subscriber.csproj", "Subscriber/"]
COPY ["Contracts/Contracts.csproj", "Contracts/"]
COPY ["Common/Common.csproj", "Common/"]
RUN dotnet restore "Subscriber/Subscriber.csproj"
COPY . .
WORKDIR "/src/Subscriber"
RUN dotnet build "Subscriber.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "Subscriber.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Subscriber.dll"]
以下是my docker-compose.yml的相关部分:

version: '3.4'

services:
  subscriber:
    image: ${DOCKER_REGISTRY-}subscriber
    build:
      context: .
      dockerfile: Subscriber/Dockerfile
预期结果:使用“dotnet构建”或“docker compose”构建构建我的项目时,我会得到相同的结果

实际结果:使用“dotnet build”构建我的项目时,它们都成功编译。当我使用“docker compose build”时,会出现StyleCop错误,构建步骤失败

错误消息

cs(2,4):错误SA1636:文件头版权 文本应与设置中的版权文本匹配。 [/src/Subscriber/Subscriber.csproj]

cs(2,4):错误SA1636:文件头版权文本应为 匹配设置中的版权文本。 [/src/Subscriber/Subscriber.csproj]

IDeleteEventMessages.cs(2,4):错误SA1636:文件头版权 文本应与设置中的版权文本匹配。 [/src/Subscriber/Subscriber.csproj]

MessageHandlers/EventMessageHandler.cs(2,4):错误SA1636:文件 标题版权文本应与 设置。[/src/Subscriber/Subscriber.csproj]


看起来您的
stylecop.json
与您的
csproj
文件相比处于较高的级别。它可能不会在生成之前被复制,stylecop使用默认设置。可能会将
COPY stylecop.json./
与其他副本一起添加。不过,作为测试,如果删除/重命名
stylecop.json
,在
dotnet构建过程中会发生什么?@JonathonChase副本不会更改输出。当我从项目中删除stylecop.json并再次运行“docker compose build”时,我会遇到很多很多错误。有趣。不过,最初的错误也存在。你发现了什么。我只是不知道是什么。Stylecop在docker compose构建中的行为有细微的不同?我想知道这是否与行尾有关,因为在最初的情况下,唯一的错误与版权有关,我在stylecop.json中定义了这一点。@JonathonChase当我从shared.ruleset中禁用版权规则(SA1633和SA1636)时,所有内容都已生成。这一定是因为我打开了git的自动空白功能,然后事情变得一团糟。它原来是我的stylecop.json文件标题文本中的版权符号()。无论出于何种原因,Stylecop分析器在版本配置中没有正确地进行比较。这实际上发生在dotnet构建、Visual Studio和docker compose中。