gpt4 book ai didi

visual-studio-2015 - Visual Studio 2015 中的 GetClassificationSpans 不返回任何内容

转载 作者:行者123 更新时间:2023-12-04 15:05:43 25 4
gpt4 key购买 nike

我有一个标记器(ITagger 的子类),我正在尝试调用 GetClassificationSpans 以便我可以使用分类来查找注释以使用标记进行格式化。这在 Visual Studio 2013 中有效,但现在在 Visual Studio 2015 中运行它时,GetClassificationSpans 总是返回一个空列表 - 即使我在调试器中检查了跨度并且它肯定传递了一个带有注释的跨度。

有谁知道 2015 年在调用 GetClassificationSpans 方面会发生什么变化?

顺便说一句:我通过在我的标记器提供程序(ITaggerProvider 的子类)中导入 IClassifierAggregatorService 并将其传递给标记器的构造函数来获取分类器:

[import]
IClassifierAggregatorService aggregator;

然后,我在从提供者处获得的聚合器上的标记器中使用以下调用:
IList<ClassificationSpan> lstClassifiers = aggregator.GetClassifier(span.Snapshot.TextBuffer).GetClassificationSpans(span);

而且,正如我所说, lstClassifiers 列表总是空的。在 VS2013 中运行 find 完全相同的代码。我似乎无法在网上找到任何提及 VS2015 中可能导致此问题的任何更改的内容。

谢谢,

最佳答案

我遇到了同样的问题,尽管在不同的上下文中。从我的谷歌搜索来看,看起来他们已经改变了分类器,以便它们被懒惰地初始化......我猜 GetClassificationSpans()不会强行初始化它们。 MSFT 仍然认为这是一个错误,因此您可能希望对该问题进行投票 on VS Connect .

一个潜在的解决方法(如 MSFT 所建议的)是切换到使用 TagAggregator而不是 IClassifier .所以而不是:

var service = container.GetService<IClassifierAggregatorService>();
var classifier = service.GetClassifier(textView.TextBuffer);
var spans = classifier.GetClassificationSpans(new SnapshotSpan(...));

你可以这样写:
var service = container.GetService<IViewTagAggregatorFactoryService>();
var aggregator = service.CreateTagAggregator<IClassificationTag>(textView);
var tags = aggregator.GetTags(new SnapshotSpan(...)));

这将返回一个列表 IMappingTagSpan<IClassificationTag>而不是 ClassificationSpan 的列表,因此您使用它们的方式略有不同。但基础数据似乎基本相同——即,您可以获得每个词法元素的分类和跨度。有一些细微的差异(参见 VS Connect 上的描述),但结果对于我的应用程序来说已经足够了。

关于visual-studio-2015 - Visual Studio 2015 中的 GetClassificationSpans 不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33587744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com