如何在 .NET 项目中设置禁用的 Symbol

前言

上次,我们在《C#怎么测试静态方法》中介绍了使用接口IClock替代DateTime.Now,方便测试。

但是,可能还是有人会无意识地在代码中使用DateTime.Now。

那么,我们希望开发人员不能再使用DateTime.Now.

怎么实现呢?

我们可以利用代码分析器帮助我们达到目的。

BannedApiAnalyzers 分析器

Microsoft.CodeAnalysis.BannedApiAnalyzers 允许设置项目中禁用的 Symbol(类型、方法、属性等)的列表。当开发人员使用其中一个被禁用的 Symbol 时,分析器将报告警告。

首先,将BannedSymbols.txt添加到项目中:

<ItemGroup>
  <AdditionalFiles Include="BannedSymbols.txt" />
</ItemGroup>

并将禁用的 Symbol 按以下格式填入文件:

{Documentation Comment ID string for the symbol}[;Description Text]

比如禁用DateTime.Now:

P:System.DateTime.Now;请使用 IClock

详细格式说明请参看 https://github.com/dotnet/roslyn-analyzers/blob/master/src/Microsoft.CodeAnalysis.BannedApiAnalyzers/BannedApiAnalyzers.Help.md

引用Nuget 包 Microsoft.CodeAnalysis.BannedApiAnalyzers,只要项目中使用了DateTime.Now,编译后会生成警告。

我们也可以将严重性改为错误,强制编译失败:

如何在 .NET 项目中设置禁用的 Symbol

结论

今天,我们介绍了使用 BannedApiAnalyzers 禁用 Symbol。