如何自动加载 Roslyn 分析器(无代码修复)

How to autoload Roslyn Analyzer (without codefix)

TL;DR

问题描述:

有很多教程(甚至是官方文档)都是从一个项目模板开始的:Analyzer with Code Fix (NuGet + VSIX)。但是,在最新版本的.NET Compiler Platform中,我没有这样的工程模板。

所以,我创建了一个 VSIX project。然后,我创建了一个 Analyzer 项目项。请注意,我没有 CodeFix 项目,因为我不需要修复代码,只显示一些警告。

这是我得到的(我做了一些更改):

[DiagnosticAnalyzer(LanguageNames.CSharp)]
public class MyAnalyzer : DiagnosticAnalyzer
{
    public const string DiagnosticId = "MyAnalyzer";
    internal static readonly LocalizableString Title = "MyAnalyzer Title";
    internal static readonly LocalizableString MessageFormat = "MyAnalyzer";
    internal const string Category = "MyAnalyzer Category";

    internal static DiagnosticDescriptor Rule = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, Category, DiagnosticSeverity.Warning, true);

    public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics 
        => ImmutableArray.Create(Rule);

    public override void Initialize(AnalysisContext context)
    {
        context.RegisterSyntaxNodeAction(Analyze, SyntaxKind.IfStatement);
    }           

    private void Analyze(SyntaxNodeAnalysisContext context)
    {
        IfStatementSyntax ifStatement = context.Node as IfStatementSyntax;

        if(ifStatement == null)
            return;

        context.ReportDiagnostic(
            Diagnostic.Create(
                Rule, 
                context.Node.GetLocation(), 
                "Hey, this is an IF statement."));
        }

    }
}

就是这样。该项目仅包含此文件,一个 .vsixmanifest 和一个 packages.config

当我运行项目处于调试模式(使用F5)时,实验实例被加载,我可以在Extensions and Updates中看到包。但是,未命中任何断点(未加载符号)并且分析器在分析器列表中不可见(在解决方案资源管理器中)。

然后我执行以下操作:

然后突然间,符号被加载,调试器在断点处停止。

有没有办法在实验实例中自动加载分析器?我是否缺少某些配置?

VSIX 模板可从Visual Studio gallery获得。

我怀疑您的 vsix 项目中缺少的是 VSIX 包清单中正确的组件列表。您需要在资产列表中同时定义 MefComponentAnalyzer