我有一个 .Net Core 2.2 解决方案,可以在 Visual Studio 中使用 dotnet 命令行构建良好,但在使用 Docker Compose 构建时会引发 StyleCop 构建错误。
我正在使用最新的 StyleCop.Analyzers nuget 包。我的解决方案的根目录中有一个共享规则集,我的所有项目都在为所有构建配置引用该规则集。我在我的解决方案的根目录中使用了一个 stylecop.json 配置文件,所有项目都有一个链接引用。stylecop.json 文件的构建操作都设置为“C# 分析器附加文件”。据我所知,StyleCop 配置正确。
这是(我相信)有问题的 .csproj 文件的相关部分。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<CodeAnalysisRuleSet>..\Shared.ruleset</CodeAnalysisRuleSet>
<TargetFramework>netcoreapp2.2</TargetFramework>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<LangVersion>latest</LangVersion>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<WarningsAsErrors />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<WarningsAsErrors />
</PropertyGroup>
<ItemGroup>
<None Remove="appsettings.json" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="..\stylecop.json" Link="stylecop.json" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>
这是我的问题项目的 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"]
以下是我的 docker-compose.yml 的相关部分:
version: '3.4'
services:
subscriber:
image: ${DOCKER_REGISTRY-}subscriber
build:
context: .
dockerfile: Subscriber/Dockerfile
预期结果:使用“dotnet build”或“docker-compose”构建我的项目时,我得到相同的结果。
实际结果:使用“dotnet build”构建我的项目时,它们都编译成功。当我使用“docker-compose build”时,我收到 StyleCop 错误,并且构建步骤失败。
错误信息:
EventMessageDeleter.cs(2,4):错误 SA1636:文件头版权文本应与设置中的版权文本匹配。[/src/Subscriber/Subscriber.csproj]
Host.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]