Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在执行代码修复后将插入符号移动到特定位置_C#_Visual Studio_Roslyn_Visual Studio Extensions_Roslyn Code Analysis - Fatal编程技术网

C# 如何在执行代码修复后将插入符号移动到特定位置

C# 如何在执行代码修复后将插入符号移动到特定位置,c#,visual-studio,roslyn,visual-studio-extensions,roslyn-code-analysis,C#,Visual Studio,Roslyn,Visual Studio Extensions,Roslyn Code Analysis,执行代码修复后,是否可以将插入符号移动到特定位置 设想以下场景: -在我正在编辑的源代码的开头,我的代码分析器检测到一个错误,并用红色的波浪线突出显示 -我正在编辑文件,因此突出显示的错误超出显示范围 -使用鼠标滚轮,我得到上述错误 -将鼠标悬停在蠕动按钮上后,将出现错误弹出窗口,其中包含建议的代码修复 -执行此操作后,编辑器的视图返回到插入符号位置 -我无法立即看到代码修复的结果 解决方案是将插入符号位置移动到发生代码修复的位置。然而,我似乎找不到办法。如果这是一个vsix扩展,那么至少可以让

执行代码修复后,是否可以将插入符号移动到特定位置

设想以下场景: -在我正在编辑的源代码的开头,我的代码分析器检测到一个错误,并用红色的波浪线突出显示 -我正在编辑文件,因此突出显示的错误超出显示范围 -使用鼠标滚轮,我得到上述错误 -将鼠标悬停在蠕动按钮上后,将出现错误弹出窗口,其中包含建议的代码修复 -执行此操作后,编辑器的视图返回到插入符号位置 -我无法立即看到代码修复的结果


解决方案是将插入符号位置移动到发生代码修复的位置。然而,我似乎找不到办法。

如果这是一个vsix扩展,那么至少可以让您接近它

IVsTextManager textManager = (IVsTextManager)GetService(typeof(SVsTextManager));
IVsTextView textView = null;
textManager.GetActiveView(1, null, out textView);
IComponentModel componentModel =(IComponentModel)GetService(typeof(SComponentModel));
Microsoft.VisualStudio.Text.Editor.IWpfTextView textView =  componentModel.GetService<IVsEditorAdaptersFactoryService>().GetWpfTextView(textView);

textView.Caret.MoveTo(/*lots of overrides*/);
IVsTextManager textManager=(IVsTextManager)GetService(typeof(SVsTextManager));
IVsTextView textView=null;
GetActiveView(1,null,out textView);
IComponentModel componentModel=(IComponentModel)GetService(typeof(SComponentModel));
Microsoft.VisualStudio.Text.Editor.IWPTextView textView=componentModel.GetService().GetWpfTextView(textView);
textView.Caret.MoveTo(/*大量覆盖*/);

我怀疑这是可能的,因为插入符号是IDE特性,诊断应该是IDE不可知的——它也可能是控制台项目或PCL。我在repo页面上找不到存在的问题,所以您可以自己提出:我不太同意-似乎找不到诊断应该是IDE不可知的原因(您是指一般的代码分析吗?如果是,我同意您的看法)。相反,您不能为VS之外的IDE编写代码分析器。我不确定Roslyn团队是否应该解决这个问题。在我看来,它更像是一个通用的VisualStudio扩展(附带说明的是,即使是“本机”代码修复程序的行为也是如此)。不过,对于我的问题,我可能没有使用合适的标记集。首先,诊断可以完美地用于控制台应用程序或类库。也许你可以对Vsix项目做些什么,但我在这方面没有经验。