我已经创建了一个自定义属性,当附加到方法时,将导致该方法被反射调用。但是,我收到代码分析警告,表明该方法没有上游调用者(它是私有的,因为我不想要任何其他调用它)。
显然我可以轻松地压制它,但它会使代码文件混乱。有没有办法让任何具有此属性的方法自动抑制此警告?
例如:
public class ArbitraryClass
{
[RunOnStartUp]
private static void RunThisOnStartup()
{
// Do some important stuff that can only be done on startup.
}
}
public static class Program
{
public static void Main()
{
AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(assembly => assembly.GetTypes())
.SelectMany(type => type.GetMethods(BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.NonPublic))
.Where(method => method.GetCustomAttribute<RunOnStartupAttribute>() != null)
.ToList()
.ForEach(method => method.Invoke(null, new object[0]));
// Start up the main form etc.
}
}
(是的,我知道在这种情况下我可能只使用静态初始化程序,但“启动时”并不是我使用它的唯一情况。)
答案 0 :(得分:0)
我知道这是旧的,但有些人可能仍然看到它。
不幸的是,您不能为所有具有该属性的方法自动抑制它。
你能做的最好的事情是创建一个全局抑制,并针对每个方法,这至少可以清理混乱。
只需创建一个名为“GlobalSuppressions.cs”的文件,使用 System.Diagnostics.CodeAnalysis 命名空间,并为您的方法添加抑制警告,如下所示。 还应该注意,它不一定存在于 GlobalSupressions.cs 中,它可以存在于任何类中,只要它在命名空间之前即可。
using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("Category", "CA1811", Scope = "member", Target = "~M:ArbitraryClass.RunThisOnStartup")]
这也可以通过按“Ctrl”+“.”自动创建,然后选择“抑制或配置问题”、“抑制(警告 ID)”,最后选择“在抑制文件中”。 我认为这个功能在 5 年前不存在,因为原始发布者知道抑制警告。