【发布时间】: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."));
}
}
}
就是这样。该项目仅包含此文件,.vsixmanifest 和 packages.config。
当我以调试模式(使用 F5)运行项目时,实验实例已加载,我可以在 Extensions and Updates 中看到包。但是,没有遇到断点(没有加载符号),并且分析器在分析器列表中不可见(在解决方案资源管理器中)。
然后我执行以下操作:
- 将输出文件夹中的 .vsix 文件重命名为 .vsix.zip 并打开它
- 从 zip 中提取程序集 DLL
- 在解决方案资源管理器中右键单击分析器
- 手动浏览/添加分析器的程序集 DLL
然后突然之间,符号被加载,调试器在断点处停止。
有没有办法在实验实例中自动加载分析器?我是否缺少一些配置?
【问题讨论】:
标签: c# roslyn autoload visual-studio-extensions analyzer