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