我正在尝试为我的 C# .NET Framework 解决方案 (4.x) 配置 BannedApiAnalyzers。
文档表明,要启用此分析器,我需要在项目级别添加组件。对于一个拥有数百个项目的项目来说,这似乎效率极低。有没有办法在解决方案级别应用这些规则集?
这可以通过将 BannedSymbols.txt 放入解决方案根文件夹中,然后创建包含以下内容的 Directory.Build.props 文件来实现。
<Project>
<Import Project="$(SolutionDir)packages\Microsoft.CodeAnalysis.NetAnalyzers.6.0.0\build\Microsoft.CodeAnalysis.NetAnalyzers.props" Condition="Exists('$(SolutionDir)packages\Microsoft.CodeAnalysis.NetAnalyzers.6.0.0\build\Microsoft.CodeAnalysis.NetAnalyzers.props')" />
<Import Project="$(SolutionDir)packages\Microsoft.CodeAnalysis.BannedApiAnalyzers.3.3.3\build\Microsoft.CodeAnalysis.BannedApiAnalyzers.props" Condition="Exists('$(SolutionDir)packages\Microsoft.CodeAnalysis.BannedApiAnalyzers.3.3.3\build\Microsoft.CodeAnalysis.BannedApiAnalyzers.props')" />
<ItemGroup>
<AdditionalFiles Include="$(SolutionDir)BannedSymbols.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>BannedSymbols.txt</Link>
</AdditionalFiles>
</ItemGroup>
<ItemGroup>
<Analyzer Include="$(SolutionDir)packages\Microsoft.CodeAnalysis.BannedApiAnalyzers.3.3.3\analyzers\dotnet\cs\Microsoft.CodeAnalysis.BannedApiAnalyzers.dll" />
<Analyzer Include="$(SolutionDir)packages\Microsoft.CodeAnalysis.BannedApiAnalyzers.3.3.3\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.BannedApiAnalyzers.dll" />
<Analyzer Include="$(SolutionDir)packages\Microsoft.CodeAnalysis.NetAnalyzers.6.0.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll" />
<Analyzer Include="$(SolutionDir)packages\Microsoft.CodeAnalysis.NetAnalyzers.6.0.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.NetAnalyzers.dll" />
</ItemGroup>
</Project>
C# 项目可以从不同的解决方案中引用。从这个角度来看,在
$(MSBuildThisFileDirectory)
中使用 $(SolutionDir)
而不是 Directory.Build.props
可能会更好:
<ItemGroup>
<AdditionalFiles Include="$(MSBuildThisFileDirectory)BannedSymbols.txt"/>
</ItemGroup>