对特定方法调用生成警告(.net 二进制类库)

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

我正在使用一些外部.net库(已编译,源代码不可用)。

我想要一些特定的方法调用来生成编译器警告。

例如,假设我们有以下课程:

public class ExternalAPI
{
     public void MethodCallNotThreadSafe();
     public void MethodCallThreadSafe();
}

我希望我的代码中的以下内容生成编译器警告(由于使用警告作为错误,这也会触发错误,但这不是主题)。

ExternalAPI api = new ExternalAPI();
api.MethodCallNotThreadSafe(); //Should trigger a warning

如前所述,我没有该库的源代码(或者在某些情况下我有,但不想使用过时的),因此 Obsolete 属性不是一个选项。

c# .net visual-studio roslyn-code-analysis
1个回答
0
投票

您可以使用 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()”在此项目中被禁止:此方法不是线程安全的。

请注意,如果您的目标方法有参数也没有类型参数,您必须相应地调整第一部分以定位正确的重载。

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