我已经实现了一个自定义CodeFixProvider,它向成员添加了一些XML文档 .
例:
public void MyMethod() { }
将转变为
/// <summary></summary>
public void MyMethod() { }
CodeFixProvider实现如下:
public class MyCodeFixProvider : CodeFixProvider
{
...
public async override Task RegisterCodeFixesAsync(CodeFixContext context)
{
await Task.Run(() =>
{
Diagnostics diagnostics = context.Diagnostics.First();
CodeAction codeFix = CodeAction.Create("Title", c => CreateXmlDocs(...));
context.RegisterCodeFix(codeFix, diagnostics);
}
).ConfigureAwait(false);
}
...
}
一切都像预期的那样工作 .
现在我想添加一些额外的功能:应用代码修复后,插入符号应该移动到空的摘要标记内 .
我发现了Microsoft.CodeAnalysis.Features NuGet包中包含的DocumentNavigationOperation类 . 此类应该能够将插入符号移动到指定位置 . 但我找不到如何使用这个类的任何说明 . 如果我从CreateXmlDocs方法中调用它,则抛出异常:
Navigation must be performed on the foreground thread.
码:
private static async Task<Solution> CreateXmlDocs()
{
...
new DocumentNavigationOperation(newDocument.Id, 42)
.Apply(newDocument.Project.Solution.Workspace, cancellationToken);
...
}
我不确定在CreateXmlDocs方法中使用此类是否有意义,因为在调用DocumentNavigationOperation时Visual Studio尚未应用此方法中创建的新解决方案 .
在应用代码修复后,有人知道移动插入符号的解决方案吗?
1 回答
好的,与此同时我找到了解决方案 .
要使其正常工作,需要自定义
CodeAction
:新的
CodeAction
可用于CodeFixProvider
而不是CodeAction.Create()
: