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

Lan*_*der 2 c# roslyn

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

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

svi*_*ick 6

CodeAction有分开ComputePreviewOperationsAsync()ComputeOperationsAsync().让他们回归不同的价值是我相信你正在寻找的.但是如果你使用通用的调用方法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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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