我正在扩展VisualStudio 2015 Html编辑器。我使用IOleCommandTarget
属性修饰了我的[TextViewRole(PredefinedTextViewRoles.PrimaryDocument)]
实施命令过滤器。这样我的命令就不会在Annotate和Merge TextViews中运行。但是,当我打开Annotate或Merge窗口时,我遇到了MainHtmlController
开始循环的问题。这是我的堆栈跟踪:
我不知道这里有什么信息可以提供帮助。我的内容类型定义如下所示。有'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
中某处出现空异常,这看起来不太好。然而,这些都是非致命的,并且不会将整个视觉效果降低。合并和注释至少是可用的。
如果需要,我会提供更多信息,但我不知道可能相关的内容。