c# - Roslyn 分析器代码修复 - 禁用预览选项

标签 c# roslyn

如何禁用 C# 项目中灯泡后显示的预览对话框?

我遇到的问题是,RegisterCodeFixesAsync 调用数据库并递增 id,这是完成两次(一次是在预览期间,第二次是在调用操作时),而不是只递增一次,id 递增两次

最佳答案

CodeAction 具有单独的 ComputePreviewOperationsAsync()ComputeOperationsAsync()。让他们返回不同的值(value)是我相信你正在寻找的。但是,如果您使用调用 CodeAction.Create() 的常用方法,两者将返回相同的值。

您可以改为创建一个自定义类,该类继承自 CodeAction 并按您希望的方式覆盖方法。例如:

class NoPreviewCodeAction : CodeAction
{
    private readonly Func<CancellationToken, Task<Solution>> createChangedSolution;

    public override string Title { get; }

    public override string EquivalenceKey { get; }

    public NoPreviewCodeAction(
        string title, Func<CancellationToken, Task<Solution>> createChangedSolution,
        string equivalenceKey = null)
    {
        this.createChangedSolution = createChangedSolution;

        Title = title;
        EquivalenceKey = equivalenceKey;
    }

    protected override Task<IEnumerable<CodeActionOperation>> ComputePreviewOperationsAsync(
        CancellationToken cancellationToken)
    {
        return Task.FromResult(Enumerable.Empty<CodeActionOperation>());
    }

    protected override Task<Solution> GetChangedSolutionAsync(
        CancellationToken cancellationToken)
    {
        return createChangedSolution(cancellationToken);
    }
}

此版本完全禁用预览。另一种选择是使预览采用不同的路径,例如在数据库中查询下一个值,但不更新它。

关于c# - Roslyn 分析器代码修复 - 禁用预览选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37435740/

相关文章:

c# - 从另一个刚刚编译的程序集编译程序集

c# - 采用 DateTimeOffset 的表达式导致 Visual Studio 内部编译器错误

c# - Microsoft.CodeAnalysis.TypeKind 枚举中的 TypeKind.Submission 和 TypeKind.Module 是什么意思?

c# - 作为代码修复的一部分在类上实现接口(interface)

C# 6 安全导航在 VS2015 预览中不起作用

.net - 您可以使用 Roslyn 从语义符号转换回语法树节点吗?

c# - 返回 Tuple<bool, string> 而不是抛出 exception()?

c# - 如何将 c 结构从 dll 转换为 C#

C#:如何抑制 UserControl 以将焦点放在第一个子控件上?

c# - 绑定(bind)到目标方法时出错