我创建了一个VSIX扩展程序,作为自定义扩展程序的自定义编辑器。分类器应用语法高亮显示,并且效果很好,并且分类器在文档内的每个按键上都会被调用,因此颜色总是会更新。
有一个选项菜单,用户可以在其中为特定代码段设置自定义颜色。颜色保存在Settings.Settings文件中,分类器格式定义使用此文件中的值。
现在,在通过选项窗口设置颜色之后,编辑器应使用新颜色进行更新。这没有发生。
我尝试过的是获取活动的EnvDTE ProjectItem并重新加载,保存/关闭,重新加载项目,没有任何变化。新颜色将保存在设置中,分类器将获得这些颜色,即使文档更新并调用了分类器OnChange,它仍会应用旧颜色。当我再次打开选项菜单时,它将显示新的颜色。
我必须重新启动Visual Studio,以使Classifier实际更新编辑器中的颜色。
这是处理此问题的代码:
Shell.ThreadHelper.ThrowIfNotOnUIThread();
var dte = Shell.Package.GetGlobalService(typeof(SDTE)) as DTE;
string path = dte.ActiveDocument.FullName;
dte.ActiveDocument.Save();
dte.ActiveDocument.Close();
dte.ItemOperations.OpenFile(path);