我有一个Visual Studio扩展,它获取值,然后将值设置为 在“选项”对话框中,选择“文本编辑器”->“常规”->“曲目更改”设置。
与Visual Studio 2012-2017一起正常工作的代码:
DTE vsEnvironment = (DTE)GetService(typeof(DTE));
Property trackChangesProperty = vsEnvironment.Properties["TextEditor", "General"].Item("TrackChanges");
抛出带有以下消息的COMException
:“无效的索引。(来自HRESULT的异常:0x8002000B(DISP_E_BADINDEX))” 在Visual Studio 2019中的EnvDTE._DTE.get_Properties(String Category, String Page)
。 / p>
显然是移动了设置,所以我尝试获取新位置,将设置导出到Visual Studio 2017和2019中的文件中,并比较了结果:
Visual Studio 2017:
<ToolsOptionsCategory name="TextEditor" RegisteredName="TextEditor"> <ToolsOptionsSubCategory name="General" RegisteredName="General" PackageName="Text Management Package"> <PropertyValue name="TrackChanges">true</PropertyValue> </ToolsOptionsSubCategory>
Visual Studio 2019:
<Category name="Text Editor_General" Category="{c178af61-531a-46f0-bd57-102d9e42c711}" Package="{e269b994-ef71-4ce0-8bcd-581c217372e8}" RegisteredName="Text Editor_General" PackageName="Microsoft.VisualStudio.Editor.Implementation.EditorPackage"> <PropertyValue name="TrackChanges">true</PropertyValue>
我仍然不确定如何使用该信息,因为DTE.Properties
的索引器接受两个参数:Category
和Page
。我已经尝试过以下方法:
vsEnvironment.Properties["TextEditor", null].Item("TrackChanges");
vsEnvironment.Properties["TextEditor", string.Empty].Item("TrackChanges");
vsEnvironment.Properties["Text Editor_General", null].Item("TrackChanges");
vsEnvironment.Properties["Text Editor_General", string.Empty].Item("TrackChanges");
但没有成功。
答案 0 :(得分:0)
Microsoft工作人员clarified可以使用以下任何一种方法:
使用IVsTextManager3.SetUserPreferences3()
。在旧版本的Visual Studio中也可用(我已使用Visual Studio 2012-2019测试过),但API却很丑陋:
IVsTextManager3 textManager = this.GetService(typeof(VsTextManagerClass)) as IVsTextManager3;
VIEWPREFERENCES3[] viewPreferences3Array = new VIEWPREFERENCES3[1];
FONTCOLORPREFERENCES2[] fontColorPreferences2Array = new FONTCOLORPREFERENCES2[1];
FRAMEPREFERENCES2[] framePreferences2Array = new FRAMEPREFERENCES2[1];
LANGPREFERENCES2[] langPreferences2Array = new LANGPREFERENCES2[1];
textManager.GetUserPreferences3(viewPreferences3Array, framePreferences2Array, langPreferences2Array, fontColorPreferences2Array);
VIEWPREFERENCES3 viewPreferences3 = viewPreferences3Array[0];
viewPreferences3.fTrackChanges = 0;
textManager.SetUserPreferences3(new VIEWPREFERENCES3[] { viewPreferences3 }, framePreferences2Array, langPreferences2Array, fontColorPreferences2Array);
使用IEditorOptionsFactoryService
MEF服务。在Visual Studio 2019和更高版本中添加了此API:
<IEditorOptionsFactoryService>.GlobalOptions.GetOptionValue<bool>(DefaultTextViewHostOptions.ChangeTrackingId);
<IEditorOptionsFactoryService>.GlobalOptions.SetOptionValue<bool>(DefaultTextViewHostOptions.ChangeTrackingId, <true/false>);