我能够为我的扩展获取 Roslyn 分析器,但无法为相同的诊断获取 codeFix 提供程序
I am able to get the Roslyn analyzer for my extension but failed to get the codeFix provider for the same diagnostics
我创建了一个引用 Roslyn 分析器和代码修复库的 vsix 项目。我能够为我的扩展获取分析器,但未能为相同的诊断获取代码修复提供程序。
分析仪
namespace CSharpDiagnostics
{
[DiagnosticAnalyzer(LanguageNames.CSharp)]
public class AsyncMethodNameAnalyzer : SyntaxNodeAnalyzer
{
// Analyzer code, which I am able to debug and working fine.
}
}
代码修复提供商
这是针对上述 AsyncMethodNameAnalyzer
的代码修复。
Export
属性似乎无法正常工作。
namespace CSharpDiagnostics
{
[ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(AsyncMethodNameCodeFix))]
public class AsyncMethodNameCodeFix : CodeFixProvider
{
public override ImmutableArray<string> FixableDiagnosticIds
{
get
{
return ImmutableArray.Create(AsyncMethodNameAnalyzer.DiagnosticId);
}
}
public sealed override FixAllProvider GetFixAllProvider()
{
return WellKnownFixAllProviders.BatchFixer;
}
public override async Task RegisterCodeFixesAsync(CodeFixContext context)
{
// My code for fix provider
}
}
}
您必须确保在您的 vsixmanifest 文件中注册了 MEF 扩展。
我创建了一个引用 Roslyn 分析器和代码修复库的 vsix 项目。我能够为我的扩展获取分析器,但未能为相同的诊断获取代码修复提供程序。
分析仪
namespace CSharpDiagnostics
{
[DiagnosticAnalyzer(LanguageNames.CSharp)]
public class AsyncMethodNameAnalyzer : SyntaxNodeAnalyzer
{
// Analyzer code, which I am able to debug and working fine.
}
}
代码修复提供商
这是针对上述 AsyncMethodNameAnalyzer
的代码修复。
Export
属性似乎无法正常工作。
namespace CSharpDiagnostics
{
[ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(AsyncMethodNameCodeFix))]
public class AsyncMethodNameCodeFix : CodeFixProvider
{
public override ImmutableArray<string> FixableDiagnosticIds
{
get
{
return ImmutableArray.Create(AsyncMethodNameAnalyzer.DiagnosticId);
}
}
public sealed override FixAllProvider GetFixAllProvider()
{
return WellKnownFixAllProviders.BatchFixer;
}
public override async Task RegisterCodeFixesAsync(CodeFixContext context)
{
// My code for fix provider
}
}
}
您必须确保在您的 vsixmanifest 文件中注册了 MEF 扩展。