微软提供了很多分析器,今天介绍一个.NET API analyzer,.NET API分析器是Roslyn分析器,它发现不同平台上C#API的潜在兼容性风险,并检测对不赞成使用的API的调用。.NET API analyzer目前在VS2017或者更高版本的VS中提供,而且还是预发行版本。经过测试.NET API analyzer工具在.NET Core项目中比较好用。
一、下载安装
1、打开Visual Studio2019
2、右键要运行分析器的项目,然后选择“ 管理NuGet软件包”
3、在NuGet软件包管理器选项卡上:选择“ nuget.org”作为程序包源,选择包括预发布,搜索Microsoft.DotNet.Analyzers.Compatibility
4、点击安装
二、.NET API analyzer作用
主要作用就是发现不推荐使用的API并给于提示,我们之前通知API已过时且不应该使用的一种方法是使用ObsoleteAttribute属性对其进行标记,但是这种方法的缺点是,对于所有过时的API只有一个诊断ID ,这意味着:
-
- 每种情况下都有专用的文件是不可能的。
- 禁止显示某些类别的警告是不可能的。您可以全部或全部不显示。
- 为了通知用户新的弃用,必须更新引用的程序集或目标程序包。
总结说就是使用ObsoleteAttribute无法对单个警告作随意处理。
API分析器使用以DE开头的特定于API的错误代码,该代码允许控制各个警告的显示
三、.NET API analyzer的使用
1、警告显示
在代码中使用过时的API(例如WebClient)时,API Analyzer会以绿色的波浪线突出显示它。将鼠标悬停在API调用上时,将显示一个灯泡,其中包含有关API弃用的信息,如以下示例所示:
该错误列表窗口包含与每弃用API一个唯一的ID警告,显示在下面的例子中(DE0004
):通过单击ID,您将转到一个网页,其中包含有关不赞成使用该API的原因的详细信息以及有关可以使用的替代API的建议。
2、警告的处理
可以通过右键单击突出显示的成员并选择抑制<diagnostic ID>来抑制任何警告。有两种抑制警告的方法:
(1)第一种办法是在本地禁止警告:为了抑制局部的警告,在部件上右键单击您要为禁止警告,然后选择快捷操作和的重构 > 禁止诊断ID <诊断ID> > 在源代码。该的#pragma警告预处理器指令被添加到限定的范围你的源代码
(2)第二种方法:全局禁止警告,禁止警告全球范围内,在部件上右键单击您要为禁止警告,然后选择快捷操作和的重构 > 禁止诊断ID <诊断ID> > 在抑制文件。
一个GlobalSuppressions.cs文件会添加到项目中。新的全局禁止都会添加到此文件。建议使用全局抑制来确保跨项目的API使用的一致性。
三、跨平台中的使用
与不推荐使用的API相似,分析器可以识别所有非跨平台的API。例如,Console.WindowWidth在Windows上有效,但在Linux和macOS上无效。诊断ID显示在“ 错误列表”窗口中。如果仅针对某些平台开发代码,则可以对不使用的所有其他平台禁止所有警告不打算在上面运行代码。为此,您只需要编辑项目文件并添加PlatformCompatIgnore
列出所有要忽略的平台的属性。可接受的值为:Linux
,macOS
和Windows
。
<PropertyGroup> <PlatformCompatIgnore>Linux;macOS</PlatformCompatIgnore> </PropertyGroup>
如果您的代码针对多个平台,并且您想利用其中某些平台不支持的API,则可以使用以下if
语句来保护代码的这一部分:
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { var w = Console.WindowWidth; // More code }
四、组态
用户决定如何对待诊断:警告,错误,建议或将其关闭。例如,作为一名架构师,您可以决定将兼容性问题视为错误,对某些不赞成使用的API的调用将生成警告,而其他仅生成建议。您可以通过诊断ID和项目分别进行配置。为此,在Solution Explorer中,导航到项目下的Dependencies节点。展开节点Dependencies > Analyzers > Microsoft.DotNet.Analyzers.Compatibility。右键单击诊断ID,选择“ 设置规则集严重性”,然后选择所需的选项。