.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 的功能(如筛选器等),还需要了解更多的背景知识。
Help Title 必须存在于一个帮助集合中。
Microsoft Help 2 定义了两个级别的帮助文档容器:Help Title 和帮助集合。Help Title 是一组相关的帮助主题,编译为一个 .HxS 文件。帮助集合是一个或多个 Help Title 的集合。(您可以这样理解:一个 Help Title 可以被当作一个帮助集合,但反过来不成立。) 每个帮助集合必须分配有一个唯一的命名空间。
只有帮助集合才能被集成到 VS.NET 的帮助系统中。
帮助集合必须在每台机器上注册后才能被访问。
Microsoft Help 2 帮助系统维护一个注册表(不要和 Windows 注册表混淆),保存当前机器中所有已安装的帮助集合。此注册表用于定位超链接的目的地,执行检索,显示索引等。这是 Microsoft Help 2 中一个核心的部分。
因为这个原因,帮助集合必须在安装时注册到每台客户端机器中,否则将无法访问得到。
已注册的帮助集合可以被“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 文档引擎使用了几个配置项,意在简化整个过程。
首先,您应该设置 GenerateCollectionFiles 为 true。这将指示 NDoc 将生成的文档合并到 VS.NET 合并文档集合中去。
然后,您需要指定 CollectionNamespace,帮助集合的命名空间名称。不要使用空格、汉字等 URI 中不允许的字符。建议您设法让这个命名空间名称不容易重复,比如以您的公司名开始,等等。
第三步,指定 PlugInNamespace。它表示要“plugged-in”到哪个文档集合中去。当使用 h2reg.exe 部署您的帮助文档时,它们被插接到 VS.NET 的合并文档集合中去。默认值 ms.vscc 指示 h2reg.exe 自动判断 VS.NET 是 2002 或 2003 版本。
每个帮助主题的 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 项目文件重新编译。
NDoc development is hosted by
|
![]() |