我正在使用一些外部.net库(已编译,源代码不可用)。
我想要一些特定的方法调用来生成编译器警告。
例如,假设我们有以下课程:
public class ExternalAPI
{
public void MethodCallNotThreadSafe();
public void MethodCallThreadSafe();
}
我希望我的代码中的以下内容生成编译器警告(由于使用警告作为错误,这也会触发错误,但这不是主题)。
ExternalAPI api = new ExternalAPI();
api.MethodCallNotThreadSafe(); //Should trigger a warning
如前所述,我没有该库的源代码(或者在某些情况下我有,但不想使用过时的),因此 Obsolete 属性不是一个选项。
您可以使用 Microsoft.CodeAnalysis.BannedApiAnalyzers NuGet 包。
从其文档进行总结,将包添加到您的项目/解决方案后,将
BannedSymbols.txt
添加到您的项目/解决方案,并将其添加到您的 csproj
<ItemGroup>
<AdditionalFiles Include="path to BannedSymbols.txt"/>
</ItemGroup>
现在您只需填写
BannedSymbols.txt
。
一行应该看起来像
{符号的文档注释 ID 字符串}[;描述文本]
鉴于您希望获得有关使用给定方法的警告 (
ExternalAPI.MethodCallNotThreadSafe
),第一部分应类似于 M:Namespace.Type.Method
,对于您的情况,它会转换为 M:ApiNamespace.ExternalAPI.MethodCallNotThreadSafe
。第二部分是可选的,可让您自定义警告消息。
例如使用
M:ApiNamespace.ExternalAPI.MethodCallNotThreadSafe; this method isn't thread safe
,执行 api.MethodCallNotThreadSafe();
将会给您以下警告:
RS0030:符号“ExternalAPI.MethodCallNotThreadSafe()”在此项目中被禁止:此方法不是线程安全的。
请注意,如果您的目标方法有参数也没有类型参数,您必须相应地调整第一部分以定位正确的重载。