Merge,Annotate中的Microsoft.Html.MainHtmlController中的StackOverflowException,

时间:2016-04-13 20:04:08

标签: c# visual-studio visual-studio-2015 visual-studio-extensions

我正在扩展VisualStudio 2015 Html编辑器。我使用IOleCommandTarget属性修饰了我的[TextViewRole(PredefinedTextViewRoles.PrimaryDocument)]实施命令过滤器。这样我的命令就不会在Annotate和Merge TextViews中运行。但是,当我打开Annotate或Merge窗口时,我遇到了MainHtmlController开始循环的问题。这是我的堆栈跟踪:

Stacktrace when StackOwerflow happens.

我不知道这里有什么信息可以提供帮助。我的内容类型定义如下所示。有'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; }

但这是有史以来最难看的解决方案。并且它会导致CommandTargetToOleShim中某处出现空异常,这看起来不太好。然而,这些都是非致命的,并且不会将整个视觉效果降低。合并和注释至少是可用的。

如果需要,我会提供更多信息,但我不知道可能相关的内容。

0 个答案:

没有答案