【问题标题】:How to autoload Roslyn Analyzer (without codefix)如何自动加载 Roslyn Analyzer(无代码修复)
【发布时间】:2016-09-11 22:21:32
【问题描述】:

TL;DR

  • 创建VSIX Package
  • 添加了Analyzer项目项
  • 按 F5。
  • 实验实例启动,但分析器未加载,无法调试。
  • 手动添加分析器即可。
  • 问题:如何自动加载分析器?

问题描述:

有很多教程(甚至官方文档)都以项目模板开头: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."));
        }

    }
}

就是这样。该项目仅包含此文件,.vsixmanifestpackages.config

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

然后我执行以下操作:

  • 将输出文件夹中的 .vsix 文件重命名为 .vsix.zip 并打开它
  • 从 zip 中提取程序集 DLL
  • 在解决方案资源管理器中右键单击分析器
  • 手动浏览/添加分析器的程序集 DLL

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

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

【问题讨论】:

标签: c# roslyn autoload visual-studio-extensions analyzer


【解决方案1】:

VSIX 模板可从Visual Studio gallery 获得。

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

【讨论】:

  • 当我尝试从上面的链接安装扩展时,它说我已经安装了它。但是,我没有这样的项目模板(“Analyzer with CodeFix”)。我会检查一下并提供反馈。
  • 你在新项目Ui中选择的.NET framework版本是什么?
  • 你在正确的轨道上。我选择了 4.5.1。当我切换到 4.5.2+ 时,它会显示模板。谢谢。不知道它仅在 4.5.2 或更高版本中可用。
  • 无论如何,我已经按照您的建议添加了资产,并且工作正常。现在我也知道如何从头开始制作这个了 :) 非常感谢!
猜你喜欢
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 2016-09-03
相关资源
最近更新 更多