我正在研究这个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。我希望它能解决问题。但新内容类型无法解决突出显示问题。