NDoc 用户指南   [回目录] NDoc 1.3

与 Visual Studio .NET IDE 的集成

[此文档为预发布版本,在未来版本中有可能改变。]

与 Visual Studio .NET IDE 的集成

.NET Framework SDK 类库文档的每一个页面的头部都有一个嵌入的 XML 数据岛。在 Microsoft 文档资源管理器中,这些 XML 数据岛用于创建索引,链接帮助主题,查找关键字,筛选帮助主题,以及很多其他功能。Visual Studio .NET IDE 中的“动态帮助”功能也依赖于这些嵌入的 XML 数据。以下是一个 XML 数据岛示例:

<xml>

<MSHelp:TOCTitle Title="Object Class"/>

<MSHelp:RLTitle Title="Object Class"/>

<MSHelp:Keyword Index="K" Term="Object class, about Object class"/>

<MSHelp:Keyword Index="A" Term="frlrfSystemObjectClassTopic"/>

<MSHelp:Keyword Index="F" Term="System.Object"/>

<MSHelp:Attr Name="DocSet" Value="NETFramework"/>

<MSHelp:Attr Name="TopicType" Value="kbSyntax"/>

<MSHelp:Attr Name="DevLang" Value="CSharp"/>

<MSHelp:Attr Name="DevLang" Value="VB"/>

<MSHelp:Attr Name="DevLang" Value="C++"/>

<MSHelp:Attr Name="DevLang" Value="JScript"/>

<MSHelp:Attr Name="DevLang" Value="VJ#"/>

<MSHelp:Attr Name="Technology" Value="WFC"/>

<MSHelp:Attr Name="Technology" Value="ManagedC"/>

<MSHelp:Attr Name="TechnologyVers" Value="kbWFC"/>

<MSHelp:Attr Name="TechnologyVers" Value="kbManagedC"/>

<MSHelp:Attr Name="Locale" Value="kbEnglish"/>

<MSHelp:Attr Name="DocSet" Value="NETCompactFramework"/>

<MSHelp:Attr Name="TechnologyVers" Value="kbProfile2NETCF"/>

<MSHelp:Attr Name="HelpPriority" Value="2"/>

</xml>

NDoc VS.NET 文档引擎同样创建这样的 XML 数据岛,以提高和 Microsoft 文档资源管理器以及 VS.NET IDE 的集成性。

要求

尽管 NDoc 为每一帮助主题生成必要的 XML 数据岛,但要更好的利用 Microsoft Help 2 的功能(如筛选器等),还需要了解更多的背景知识。

  1. Help Title 必须存在于一个帮助集合中。

    Microsoft Help 2 定义了两个级别的帮助文档容器:Help Title 和帮助集合。Help Title 是一组相关的帮助主题,编译为一个 .HxS 文件。帮助集合是一个或多个 Help Title 的集合。(您可以这样理解:一个 Help Title 可以被当作一个帮助集合,但反过来不成立。) 每个帮助集合必须分配有一个唯一的命名空间。

    只有帮助集合才能被集成到 VS.NET 的帮助系统中。

  2. 帮助集合必须在每台机器上注册后才能被访问。

    Microsoft Help 2 帮助系统维护一个注册表(不要和 Windows 注册表混淆),保存当前机器中所有已安装的帮助集合。此注册表用于定位超链接的目的地,执行检索,显示索引等。这是 Microsoft Help 2 中一个核心的部分。

    因为这个原因,帮助集合必须在安装时注册到每台客户端机器中,否则将无法访问得到。

  3. 已注册的帮助集合可以被“plugged-in”进 VS.NET 合并文档集合。

    Microsoft Help 2 允许帮助集合的插接。可以将您的帮助集合插接到其他已有的帮助集合中,比如 VS.NET 合并文档集合,它的命名空间是 MS.VSCC.2003

还很糊涂?

Microsoft Help 2 确实是一套复杂的技术。更深入的信息请查阅 VSHIK 文档。网站 helpware.net 提供了很多有关 Microsoft Help 2 的有用资料和教程。HelpWare 还提供了一个名为 FAR 的共享软件,它更证明了 Microsoft Help 2 帮助系统的潜力。

VS.NET 文档引擎使用了几个配置项,意在简化整个过程。

筛选器

每个帮助主题的 XML 数据岛中可以包含一个或多个 DocSet 值。在文档资源管理器及 VS.NET IDE 中,这些 DocSet 值常常被各个筛选器用于筛选帮助索引及搜索范围。

默认的一些筛选器定义如下:

Windows Client SDK,     	Query: "DocSet"="WCSDK"
.NET Framework,            	Query: ("DocSet"="NETFramework" OR "DocSet" = "NETFrameworkExtender") OR (("DocSet"="C#" OR "DocSet"="Visual Basic" OR  "DocSet"="Visual C++" OR "DocSet"="VBA" OR "DocSet"="VJ#" OR "DocSet"="Visual Studio") AND "Technology"="ManagedCode")
Visual Studio 宏,	    	Query: "DocSet" = "VSM" OR "DocSet" = "NETFramework"
Visual Basic,              	Query: "DocSet" = "Visual Basic" OR "DocSet" = "NETFramework" OR "DocSet" = "NETFrameworkExtender" OR "DocSet" = "DHTML" OR "DocSet" = "XML" OR ("DocSet" = "kbmsdn" AND "ProductVers" = "kbVBp700")
Visual C++,                	Query: "DevLang" = "C" OR "DevLang" = "C++" OR "Product" = "VC" OR "DocSet" = "PSDK" OR "DocSet" = "NETFramework" OR ("DocSet" = "kbmsdn" AND "ProductVers" = "kbVC700")
Platform SDK,              	Query: "DocSet" = "PSDK"
(no filter),               	Query: 
企业级服务器, 	       	Query: "DocSet" = "NETEnterpriseServers" OR "DocSet" = "SQL Server"
Internet 开发,	      	Query: "DocSet" = "DHTML" OR "DocSet" = "XML" OR "DevLang" = "DHTML" OR "DevLang" = "HTML" OR "DevLang" = "VBScript" OR "DevLang" = "JScript" OR "DevLang" = "ASP" OR "Technology" = "kbSOAP" OR "Technology" = "ASPNET" OR "Technology" = "HPS"
Visual Studio,             	Query: "DocSet" = "Visual Studio" OR "DocSet" = "Visual Studio SDK" OR "DocSet" = "CrystalReports" OR "DocSet" = "Visual Source Safe" OR "DocSet" =  "VSAnalyzer" OR "DocSet" = "PSDK" OR "DocSet" = "NETFramework" OR "DocSet" = "NETFrameworkExtender" OR "DocSet" = "NETEnterpriseServers" OR ("DocSet" = "kbmsdn" AND "ProductVers" = "kbVS700")
Visual C#,                 	Query: "DocSet" = "C#" OR "DocSet" = "NETFramework" OR "DocSet" = "NETFrameworkExtender" OR "DocSet" = "DHTML" OR "DocSet" = "XML" OR ("DocSet" = "kbmsdn" AND "ProductVers" = "C#")
Samples,                   	Query: "TopicType"="kbSampleProd"
Visual FoxPro,             	Query: "DocSet" = "Visual FoxPro" OR ("DocSet" = "kbmsdn" AND "ProductVers" = "kbVFP700")
Knowledge Base,            	Query: "DocSet" = "kbKB"
Visual J#,                 	Query: "DocSet" = "VJ#" OR "DocSet" = "NETFramework" OR "DocSet" = "NETFrameworkExtender" OR "DocSet" = "DHTML" OR "DocSet" = "XML" OR ("DocSet" = "kbmsdn" AND "ProductVers" = "VJ#")
.NET Framework 精简版,    	Query: "DocSet"="Smart Devices" OR "DocSet"="NetCompactFramework"
中文(简体)文档,		Query: ("Locale"="kbChineseSimp")

将您的帮助集合加入上面这些筛选器的搜索范围,可以很简单的指定文档引擎的 DocSetList 配置项。它是一个逗号分隔的字符串,每一项最终 都被写成 XML 数据岛中的一行 DocSet 值。当用户使用这些筛选器时,如果您的帮助页面 XML 数据岛中具有特定的 DocSet 值,您的帮助文档就会被包括在搜索范围中。

NDoc 默认将 HtmlHelpName 作为一行 DocSet 值写入每页的 XML 数据岛。您不需要通过 DocSetList 重复定义它。

NDoc 默认会注册一个新的筛选器,这个筛选器的查询条件是 "DocSet" = "HtmlHelpName",即这个筛选器将只搜索这个帮助集合的内容。Microsoft Help 2 允许您定义其他自定义的筛选器,但已经超出 NDoc 的工作范围,您需要自行查阅 VSHIK 文档,修改 Microsoft Help 2 项目文件重新编译。

请参见

VS.NET 2003 文档引擎, VSHIK 文档, Microsoft Help 2 部署