BannedSymbols.txt 可以在解决方案范围内而不是在每个项目上添加吗?

问题描述 投票:0回答:2

我正在尝试为我的 C# .NET Framework 解决方案 (4.x) 配置 BannedApiAnalyzers。

文档表明,要启用此分析器,我需要在项目级别添加组件。对于一个拥有数百个项目的项目来说,这似乎效率极低。有没有办法在解决方案级别应用这些规则集?

https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.BannedApiAnalyzers/BannedApiAnalyzers.Help.md

c# visual-studio-2022 roslyn-code-analysis .net-4.8
2个回答
2
投票

这可以通过将 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>

0
投票

C# 项目可以从不同的解决方案中引用。从这个角度来看,在

$(MSBuildThisFileDirectory)
中使用
$(SolutionDir)
而不是
Directory.Build.props
可能会更好:

<ItemGroup>
    <AdditionalFiles Include="$(MSBuildThisFileDirectory)BannedSymbols.txt"/>
</ItemGroup>

参见https://github.com/dotnet/roslyn/blob/34268d1bb9370c7b01c742303a895a99daf10d6a/src/Features/Directory.Build.targets#L4C14-L6

© www.soinside.com 2019 - 2024. All rights reserved.