我正在使用相当复杂的 .editorconfig 文件构建一些 C#(.net6 核心)代码。
所有 csproj 文件都有
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
只有1个.editorconfig,并且位于根文件夹中,带有
root = true
代码在 Visual Studio 2022(最新版本)中构建时没有错误(甚至没有任何智能感知错误),并且在命令行中也可以使用
dotnet build --configuration Debug MySolution.sln
当我在 BitBucket 管道上构建时(使用完全相同的 dotnet 构建),我得到了很多
error IDE0040: Accesibility modifiers required
错误是正确的,但我没有在本地构建错误。
如何让我的本地构建匹配更严格的 BB 构建?
编辑
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AccelerateBuildsInVisualStudio>true</AccelerateBuildsInVisualStudio>
<DocumentationFile>bin\$(Configuration)\($AssemblyName).xml</DocumentationFile>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
<ImplicitUsings>enable</ImplicitUsings>
<IsPackable>true</IsPackable>
<Nullable>enable</Nullable>
<TargetFramework>net6.0</TargetFramework>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
## Removed <ItemGroup> PacketReferences / ProjectReferences
</Project>
csproj 没有条件部分。
解决方案?
我还有一点,但并不理想。有两种不同的方法可以将某些项目配置为错误。 CodeStyle 和分析器可能控制相同的事情。
代码样式 -> 修饰符首选项 -> 需要辅助功能修饰符
分析仪 -> IDE0040
我发现问题了。
这与文件行结尾有关。
.gitattribute 具有设置
text=auto
,这意味着行结尾应与操作系统匹配(Linux 为 LF,Windows 为 CRLF)。
Editorconfig 有一行
行尾 = CRLF
在本地,代码是正确的(Windows 上的 git checkout 给出 CRLF 行结尾),但在服务器上它是错误的(Lines 上的 git checkout 给出 LF 行结尾,然后导致构建错误,因为它需要 CRLF)。
答案(这里有很长的讨论:https://github.com/editorconfig/editorconfig/issues/226)是使用
end_of_line = 未设置
忽略行结尾。
奇怪的是,尽管有数千个其他文件的行结尾错误,但这仅破坏了一个源文件中 2 行的构建。