我想要生成许多单独的输出CHM文件(用于不同的库,因此我为每个库都有一个单独的shfbproj ),但是这些文件有许多概念上的主题。
我希望能够将这些主题的.aml文件放在一个地方,然后将它们导入到每个项目中,以避免重复。
理想情况下,我也希望在这个中心位置有一个公共的.content文件,并将它作为"real“项目的.content文件中特定父主题节点的子节点导入,以避免重复。
有办法这样做吗?尝试将现有文件添加到项目中会导致创建文件副本,或者如果手动编辑项目以指向项目文件夹之外的文件,则会使项目可卸载。
(我还尝试为常见内容制作一个shfbproj,然后在"real“项目中引用它,但这似乎没有效果。)
发布于 2019-10-02 05:36:08
好的,有几个技巧可以让它按需要工作;感谢help-info.de's answer对Link元素的启发。
首先,在公共docs文件夹中创建CommonDoc.targets
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<ItemGroup>
<Folder Include="common\" />
</ItemGroup>
<ItemGroup>
<ContentLayout Include="$(CommonContentDir)100-common.content">
<Link>common\100-common.content</Link>
</ContentLayout>
</ItemGroup>
<ItemGroup>
<None Include="$(CommonContentDir)performance.aml">
<Link>common\performance.aml</Link>
</None>
<None Include="$(CommonContentDir)security.aml">
<Link>common\security.aml</Link>
</None>
</ItemGroup>
</Project>接下来,编辑主shfbproj文件,并在现有的PropertyGroup元素下面添加以下内容:
<PropertyGroup>
<CommonContentDir>..\..\Doc\</CommonContentDir>
</PropertyGroup>这是从带有shfbproj的文件夹到公共docs文件夹的相对路径。
还在现有Import元素的上方添加以下内容:
<Import Project="$(CommonContentDir)CommonDoc.targets" />最后(这一部分您可以在GUI中完成),将现有的.content文件分割成多个文件,这样在公共内容命名之前想要出现的任何内容都是以小于100的数字命名的,而在命名之后的任何内容都是大于100的。(显然,在合并之前,多个内容文件按字母顺序排序。)
(如果大多数内容通常都会在其前面添加,则可以对常见内容使用不同的数字,但就我的情况而言,情况正好相反。)
CommonContentDir属性有点烦人;我想使用$(MSBuildThisProjectDir),但似乎SHFB构建不承认这一点,而是试图在主shfbproj的文件夹中查找文件。
此方法的另一个缺点是,当您想要向公共主题添加新文件时,必须手动编辑CommonDoc.targets文件。但是一旦这样做,它将自动出现在引用该文件的每个帮助文件中,而不必单独更新每个shfbproj。
发布于 2019-09-25 17:57:33
解决方案在很大程度上取决于您的需求和您生成的帮助文件的预期结构。使用Visual外接程序和独立的沙堡帮助文件生成器(SHFB) GUI是不同的。
正如您在CHM屏幕截图中看到的,在我的BMI类文档之上有一个词汇表主题。此主题不在项目中,而是在另一个目录中。

帮助文件生成器项目也支持链接项。链接项是显示在当前项目的文件夹结构中但物理上位于当前项目文件夹结构之外的位置的文件。一个例子是在多个项目之间共享一个令牌文件。如果文件是在一个项目中编辑的,这些更改将反映在生成这些项目时是链接项或实际项的其他项目中。
可以按照通常的方式在Visual中添加链接项。选择要添加现有项的选项,在“文件选择”对话框中,而不是单击“添加”按钮,单击其上的下拉箭头并选择“添加为链接”选项(如下图所示)。

我认为这是你的额外内容的一个可能性。
下一步,您需要双击您的ContentLayout.content文件并手动编辑结构。

附加信息引用自沙堡帮助文件生成器文档:
如果您没有Visual,则创建链接项的唯一方法是在文本编辑器中手动编辑项目。为此,请将生成项添加到项组中。这是通过添加一个以构建操作命名的元素(即令牌文件的标记)来完成的。Include属性指向文件的相对路径,该路径通常位于当前项目的文件夹结构之外。添加嵌套在生成项中的Link元素,并将其属性值设置为当前帮助文件生成器项目中项的相对路径。例如:
<Tokens Include="..\SomeOtherProject\Tokens\SharedTokensFile.tokens">
<Link>Tokens\SharedTokens.tokens</Link>
</Tokens>上面的示例创建了一个链接的令牌文件。它的物理位置比另一个项目文件夹(..\SomeOtherProject\Tokens)中的帮助文件生成器项目文件夹高一级。它在当前项目中的虚拟位置将位于一个名为.\Tokens的文件夹中。
链接项将有一个删除选项,而不是一个删除选项。这会将它们从项目中移除,但将它们留在磁盘上,因为它们可能属于另一个项目。
https://stackoverflow.com/questions/58072601
复制相似问题