如何确保Roslyn Analyzer在某些特殊情况下不运行
How to make sure that Roslyn Analyser does not run in some special cases
我已经使用 Roslyn API 编写了一个代码分析器。分析器在代码中搜索硬编码的 Urls 并未能编译代码。
例如:
public class{
public static string demo = "https://demo.com";
}
我的分析器将无法编译上述代码,表示它在代码中找到了硬编码 Url。
在某些情况下,我希望分析器忽略硬编码 url 错误(以防用户完全强制使用它)。
无论如何我都可以给分析器信号以忽略硬编码 Url。
我想过使用这样的东西:
public class{
#region IGNORE HARDCODED URLS
public static string demo = "https://demo.com";
#endregion
}
但是这种方法的问题是我无法获取区域中声明的所有变量忽略硬编码 URL。
问题:
1.) 这种使用区域的方法是否适合我要解决的用例?大家还有什么更好的解决方案可以想到并提供吗?
2.) 如果我的方法看起来不错,那么有人能告诉我如何获取特定区域中声明的所有变量吗?
您可以使用 #pragma warning
指令为特定代码段禁用(和重新启用)分析器。任何被 #pragma warning disable
指令禁用的分析器诊断将被忽略,直到文件结束,或者直到您使用 #pragma warning restore
.
重新启用它
假设您的分析器具有 ID AA0001
,在此示例中不会为 Demo
发出诊断:
public class C
{
#pragma warning disable AA0001
public static string Demo = "https://example.com/";
#pragma warning restore AA0001
}
我已经使用 Roslyn API 编写了一个代码分析器。分析器在代码中搜索硬编码的 Urls 并未能编译代码。
例如:
public class{
public static string demo = "https://demo.com";
}
我的分析器将无法编译上述代码,表示它在代码中找到了硬编码 Url。
在某些情况下,我希望分析器忽略硬编码 url 错误(以防用户完全强制使用它)。
无论如何我都可以给分析器信号以忽略硬编码 Url。
我想过使用这样的东西:
public class{
#region IGNORE HARDCODED URLS
public static string demo = "https://demo.com";
#endregion
}
但是这种方法的问题是我无法获取区域中声明的所有变量忽略硬编码 URL。
问题:
1.) 这种使用区域的方法是否适合我要解决的用例?大家还有什么更好的解决方案可以想到并提供吗?
2.) 如果我的方法看起来不错,那么有人能告诉我如何获取特定区域中声明的所有变量吗?
您可以使用 #pragma warning
指令为特定代码段禁用(和重新启用)分析器。任何被 #pragma warning disable
指令禁用的分析器诊断将被忽略,直到文件结束,或者直到您使用 #pragma warning restore
.
假设您的分析器具有 ID AA0001
,在此示例中不会为 Demo
发出诊断:
public class C
{
#pragma warning disable AA0001
public static string Demo = "https://example.com/";
#pragma warning restore AA0001
}