Getting/setting Track Changes 设置 属性 值通过 DTE 在 Visual Studio 2019
Getting/setting Track Changes setting property value trough DTE in Visual Studio 2019
我有一个 Visual Studio 扩展,它获取值然后将值设置为
选项对话框中的文本编辑器 -> 常规 -> 跟踪更改设置。
与 Visual Studio 2012-2017 一起正常工作的代码:
DTE vsEnvironment = (DTE)GetService(typeof(DTE));
Property trackChangesProperty = vsEnvironment.Properties["TextEditor", "General"].Item("TrackChanges");
正在抛出 COMException
并包含以下消息:"Invalid index. (Exception from HRESULT: 0x8002000B (DISP_E_BADINDEX))" at EnvDTE._DTE.get_Properties(String Category, String Page)
in Visual Studio 2019。
显然设置已移动,所以我试图获取新位置,将设置导出到 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");
但没有成功。
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 服务。此 API 添加于 Visual Studio 2019 及以后:
<IEditorOptionsFactoryService>.GlobalOptions.GetOptionValue<bool>(DefaultTextViewHostOptions.ChangeTrackingId);
<IEditorOptionsFactoryService>.GlobalOptions.SetOptionValue<bool>(DefaultTextViewHostOptions.ChangeTrackingId, <true/false>);
我有一个 Visual Studio 扩展,它获取值然后将值设置为 选项对话框中的文本编辑器 -> 常规 -> 跟踪更改设置。
与 Visual Studio 2012-2017 一起正常工作的代码:
DTE vsEnvironment = (DTE)GetService(typeof(DTE));
Property trackChangesProperty = vsEnvironment.Properties["TextEditor", "General"].Item("TrackChanges");
正在抛出 COMException
并包含以下消息:"Invalid index. (Exception from HRESULT: 0x8002000B (DISP_E_BADINDEX))" at EnvDTE._DTE.get_Properties(String Category, String Page)
in Visual Studio 2019。
显然设置已移动,所以我试图获取新位置,将设置导出到 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");
但没有成功。
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 服务。此 API 添加于 Visual Studio 2019 及以后:<IEditorOptionsFactoryService>.GlobalOptions.GetOptionValue<bool>(DefaultTextViewHostOptions.ChangeTrackingId); <IEditorOptionsFactoryService>.GlobalOptions.SetOptionValue<bool>(DefaultTextViewHostOptions.ChangeTrackingId, <true/false>);