Я хочу упростить анализ кода и соответствующие правила для нескольких проектов и команд.
Мы привыкли делать это с помощью пакета NuGet, который импортировал анализаторы в проекты (Microsoft.CodeAnalysis.FxCopAnalyzers и StyleCop.Analyzers) и определил набор правил, чтобы определить, как каждое правило обрабатывается VS (ошибка, предупреждение и т. д.).
Я пытался настроить это, используя общий файл .editorconfig вместо набора правил.Проблема в том, что настройки, подобные приведенным ниже, просто игнорируются, когда файл .editorconfig импортируется из общей папки.
dotnet_diagnostic.CA1062.severity = error
Для тестирования этого у меня есть очень простой сценарий, который иллюстрируетпроблема.
Файл .editorconfig выглядит следующим образом:
[*.cs]
dotnet_diagnostic.CA1062.severity = error
#dotnet_code_quality.null_check_validation_methods = NotNull
Теперь этот файл импортируется в csproj следующим образом:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<Import Project="..\..\_Shared\Build.props" />
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.4">
<PrivateAssets>All</PrivateAssets>
</PackageReference>
</ItemGroup>
</Project>
Build.props похож наthis:
<Project>
<PropertyGroup>
<SkipDefaultEditorConfigAsAdditionalFile>true</SkipDefaultEditorConfigAsAdditionalFile>
</PropertyGroup>
<ItemGroup Condition="Exists('$(MSBuildThisFileDirectory)\.editorconfig')" >
<AdditionalFiles Include="$(MSBuildThisFileDirectory)\.editorconfig" />
</ItemGroup>
</Project>
Следующий код должен вызывать ошибку на CA1062:
public int Calculate(InputData input)
{
SmartGuard.NotNull(nameof(input), input);
if (this.Multiply)
{
return input.Value * 2;
}
else
{
return input.Value + 2;
}
}
Но результатом будет предупреждение:
Теперь, если я изменю .editorconfig и раскомментирую вторую строку:
[*.cs]
dotnet_diagnostic.CA1062.severity = error
dotnet_code_quality.null_check_validation_methods = NotNull
Ошибка идет так, что означает, что null_check_validation_methods
рассматривается.
Почему это dotnet_diagnostic.CA1062.severity = error
игнорируется?