C# 合并时Microsoft.Html.MainHtmlController中的StackOverflowException,注释,

C# 合并时Microsoft.Html.MainHtmlController中的StackOverflowException,注释,,c#,visual-studio,visual-studio-2015,visual-studio-extensions,C#,Visual Studio,Visual Studio 2015,Visual Studio Extensions,我正在扩展VisualStudio 2015 Html编辑器。我已经用[TextViewRole(预定义的textViewRoles.PrimaryDocument)]属性修饰了我的IOleCommandTarget实现命令过滤器。这样,我的命令将不会在注释和合并文本视图中运行。然而,我遇到了一个问题,MainHtmlController在我打开注释或合并窗口时就开始自我循环。这是我的stacktrace: 我不知道什么信息可以在这里有所帮助。我的ContentType定义如下所示。存在“ht

我正在扩展VisualStudio 2015 Html编辑器。我已经用
[TextViewRole(预定义的textViewRoles.PrimaryDocument)]
属性修饰了我的
IOleCommandTarget
实现命令过滤器。这样,我的命令将不会在注释和合并文本视图中运行。然而,我遇到了一个问题,
MainHtmlController
在我打开注释或合并窗口时就开始自我循环。这是我的stacktrace:

我不知道什么信息可以在这里有所帮助。我的ContentType定义如下所示。存在“htmlx”,因此html编辑器可以处理文件类型

public class DothtmlContentTypeDefinition
{
    public const string ContentTypeName = "dothtml";
    //public const string JavaScriptContentType = "JavaScript";
    //public const string CSharpContentType = "cs";

    [Export(typeof(ContentTypeDefinition))]
    [Name(ContentTypeName)]
    [BaseDefinition("htmlx")]
    public ContentTypeDefinition DothtmlContentType { get; set; }

    [Export(typeof(FileExtensionToContentTypeDefinition))]
    [FileExtension(".dothtml")]
    [ContentType(ContentTypeName)]
    public FileExtensionToContentTypeDefinition DothtmlFileExtensionDefinition { get; set; }
    ...
}
在我绝望的时候,我试过:

if (textView.Roles.Any(r => r == "VSMERGEDEFAULT_LEFT" || r == "VSMERGEDEFAULT_RIGHT" || r == "ANNOTATE")) {
            ServiceManager.RemoveService<HtmlMainController>(textView);
            return; }
if(textView.Roles.Any(r=>r==“VSMERGEDEFAULT_LEFT”| | r==“VSMERGEDEFAULT_RIGHT”| | r==“ANNOTATE”)){
ServiceManager.RemoveService(文本视图);
返回;}
但这是有史以来最丑陋的解决方案。并且它会在
CommandTargetToOleShim
中的某个地方导致null异常,这看起来不太好。但是,这些都不是致命的,不会破坏整个visualstudio。合并和注释至少可用


如果需要,我将提供更多信息,但我不知道什么可能是相关的。

您有任何递归调用吗?您的意思是什么?我当然知道,事实上是百分之一百;)StackoverflowExceptions发生在您有递归调用并且它们没有达到基本情况时。如果发生这种情况,您可能需要检查递归调用。。。从你粘贴的代码中我看不到。从截图上看,方法QueryStatus被反复调用,这可能会给你一个提示。你有递归调用吗?你是什么意思?我当然知道,事实上是百分之一百;)StackoverflowExceptions发生在您有递归调用并且它们没有达到基本情况时。如果发生这种情况,您可能需要检查递归调用。。。从你粘贴的代码中我看不到。从屏幕截图上看,方法QueryStatus被反复调用,这可能会给你一个提示。