【发布时间】:2019-05-09 17:14:30
【问题描述】:
我有一个 Visual Studio 扩展,它获取值,然后将值设置为 文本编辑器 -> 常规 -> 选项对话框中的跟踪更改设置。
在 Visual Studio 2012-2017 中运行良好的代码:
DTE vsEnvironment = (DTE)GetService(typeof(DTE));
Property trackChangesProperty = vsEnvironment.Properties["TextEditor", "General"].Item("TrackChanges");
在 Visual Studio 2019 的 EnvDTE._DTE.get_Properties(String Category, String Page) 处抛出带有以下消息的 COMException:“无效索引。(来自 HRESULT 的异常:0x8002000B (DISP_E_BADINDEX))”。
显然设置已移动,所以我尝试获取新位置,将设置导出到 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");
但没有成功。
【问题讨论】:
标签: visual-studio envdte visual-studio-2019