SetLanguageServiceID不为VS 2015中的C#和VB文件启用语法突出显示

时间:2017-07-10 12:16:43

标签: c# visual-studio-2015 syntax-highlighting languageservice

我正在研究这个example并发现了问题:在调用方法后语法突出显示不适用于C#文件

_BufferAdapter.GetLanguageServiceID("694dd9b6-b865-4c5b-ad85-86356e9c88dc")

此问题在VS 2015中重现并且在VS 2013中无法重现。对于VB文件,我遇到了同样的问题。我认为这个问题与VS 2015中用于C#/ VB编辑器的新Roslyn引擎有关。如何为C#和VB文件启用语法高亮? 通常,我想创建一个简单的VS编辑器并将其WPF内容托管到我的WPF控件中。

我的代码中的方法 InitializeEditor

private void InitializeEditor(string path)
{
  var text = File.ReadAllText(path); // path to the .cs file

  var componentModel = (IComponentModel)Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(SComponentModel));
  _OleServiceProvider = (IOleServiceProvider)GetService(typeof(IOleServiceProvider));
  _BufferFactory = componentModel.GetService<ITextBufferFactoryService>();

  var contentType = componentModel.GetService<IContentTypeRegistryService>().GetContentType("CSharp");

  _EditorAdapterFactory = componentModel.GetService<IVsEditorAdaptersFactoryService>();
  _BufferAdapter = _EditorAdapterFactory.CreateVsTextBufferAdapter(_OleServiceProvider, contentType);
  _BufferAdapter.InitializeContent(text, text.Length);
  _BufferAdapter.SetLanguageServiceID("694dd9b6-b865-4c5b-ad85-86356e9c88dc")

  _ViewAdapter = _EditorAdapterFactory.CreateVsTextViewAdapter(_OleServiceProvider);
  ((IVsWindowPane)_ViewAdapter).SetSite(_OleServiceProvider);

  var initView = new[] { new INITVIEW() };
  initView[0].fSelectionMargin = 0;
  initView[0].fWidgetMargin = 0;
  initView[0].fVirtualSpace = 0;
  initView[0].fDragDropMove = 1;

  _ViewAdapter.Initialize(_BufferAdapter as IVsTextLines, IntPtr.Zero,
    (uint)TextViewInitFlags.VIF_HSCROLL |
    (uint)TextViewInitFlags.VIF_VSCROLL |
    (uint)TextViewInitFlags3.VIF_NO_HWND_SUPPORT, initView);
}

我在内容类型'CSharp'上替换了_BufferFactory.TextContentType。我希望它能解决问题。但新内容类型无法解决突出显示问题。

0 个答案:

没有答案