C# 合并时Microsoft.Html.MainHtmlController中的StackOverflowException,注释,
我正在扩展VisualStudio 2015 Html编辑器。我已经用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
[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被反复调用,这可能会给你一个提示。