什么规则适用于SHFB的IntelliSenseComponent的输出文件夹?

时间:2012-02-15 21:09:26

标签: .net sandcastle xml-documentation shfb

Noda Timeissue反对它,它提供的XML文档文件也包含所有内部和私有成员 - 这是一种耻辱。

幸运的是,Sandcastle Help File Builder有一个自定义构建组件 - IntelliSenseComponent - 这在理论上做得恰到好处。不幸的是,我无法弄清楚如何正确配置它。

文档给出了这个例子:

 <output includeNamespaces="false" namespacesFile="Namespaces"
   folder="{@OutputFolder}" />

并声明:

  

上面给出的示例来自Sandcastle帮助文件构建器的配置文件。与其一起使用时,替换标记{@SHFBFolder}和{@OutputFolder}用于在文件路径中插入帮助文件构建器的文件夹和项目的输出文件夹。这些在构建时被替换为适当的值。如果在您自己的构建脚本中使用该组件,请将这些标记分别替换为组件程序集和输出文件夹的相对路径或绝对路径。

好吧,我使用SHFB,所以我希望它可以工作。但是,除了绝对的工作路径之外,我无法获得任何。我试过了:

folder="."
folder="{@OutputFolder}"
folder="{@OutputFolder}XYZZY"
folder="{@OutputFolder}\XYZZY"
folder="{@OutputFolder}/XYZZY"
folder="{@OutputFolder}/XYZZY/"

(我只是将XYZZY用作易于搜索的东西。)

查看source code,我希望我可以使用环境变量,但这不起作用:

folder="%CD%\XYZZY"

虽然这确实......

folder="%USERPROFILE%\XYZZY"

这有效:

folder="c:\users\jon\test\xyzzy"

...但我真的不想要一个绝对的路径名。

文档表明,所有这一切都应该非常简单......我缺少什么?

涉及的版本:

  • SHFB:1.9.3.0
  • Sandcastle:2.6.10621.1

1 个答案:

答案 0 :(得分:44)

我的实验表明,SHFB的IntelliSenseComponent 确实正确处理{@OutputFolder},但是有一个细微差别。

如果

中指定了folder属性
<output includeNamespaces="false" namespacesFile="Namespaces"
        folder="..." />

指向项目的OutputPath文件夹中的 文件夹(.\docs\api),然后SHFB的构建过程创建文件夹,但在生成网站内容之前将其删除:

Last step completed in 00:00:34.5875
-------------------------------
Combining conceptual and API intermediate TOC files...

Clearing any prior web output
    Last step completed in 00:00:00.2360
-------------------------------
Extracting HTML info for HTML Help 1 and/or website...

问题是{@OutputFolder}的默认值与$(OutputPath)的值完全相同,因此如果您在{@OutputFolder}\foo属性中添加folder之类的内容那么在构建完成后你永远不会看到foo

解决方案很简单:指定一个位于项目输出文件夹 之外的文件夹,如下所示:

<output includeNamespaces="false" namespacesFile="Namespaces"
        folder="{@OutputFolder}\..\distilledApi" />
<!--                            ^^       -->

希望这有帮助。