C# Roslyn分析仪代码修复-禁用预览选项

C# Roslyn分析仪代码修复-禁用预览选项,c#,roslyn,C#,Roslyn,如何禁用“C#project”中灯泡后显示的预览对话框 我遇到的问题是,RegisterCodeFixesAsync调用数据库并增加id,这将执行两次(一次在预览期间,第二次在调用操作时),而不是仅增加一次,id将增加两次和计算操作异步()。让它们返回不同的值是我相信您正在寻找的。但是,如果使用调用CodeAction.Create()的常用方法,两者都将返回相同的值 相反,您可以创建一个自定义类,该类继承自CodeAction,并以您想要的方式重写这些方法。例如: class NoPrevie

如何禁用“C#project”中灯泡后显示的预览对话框


我遇到的问题是,RegisterCodeFixesAsync调用数据库并增加id,这将执行两次(一次在预览期间,第二次在调用操作时),而不是仅增加一次,id将增加两次和
计算操作异步()
。让它们返回不同的值是我相信您正在寻找的。但是,如果使用调用
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);
    }
}
类NoPreviewCodeAction:CodeAction
{
私有只读函数createChangedSolution;
公共重写字符串标题{get;}
公共重写字符串等价键{get;}
公共NoPreviewCodeAction(
字符串标题,Func createChangedSolution,
字符串等效项(key=null)
{
this.createChangedSolution=createChangedSolution;
头衔=头衔;
等效密钥=等效密钥;
}
受保护的覆盖任务ComputePreviewOperationsAsync(
取消令牌(取消令牌)
{
返回Task.FromResult(Enumerable.Empty());
}
受保护的覆盖任务GetChangedSolutionAsync(
取消令牌(取消令牌)
{
返回createChangedSolution(cancellationToken);
}
}

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

事实上,它会增加3倍,但一旦禁用预览,我应该能够进一步深入。非常感谢您的帮助。难道您不能重构代码,使其仅在执行
CodeAction
时执行DB增量吗?我在register codefix异步上下文中有此功能。register codefix(CodeAction.Create)(title:title,createChangedDocument:c=>createItemInDB(context.Document,declaration,c),equivalenceKey:title),diagnostic);您好@svick非常感谢您的回答。这很好地解释并解决了我的问题。非常感谢