我已经使用Sandcastle Help File Builder一段时间来生成文档 - 我现在正试图让它成为我们构建过程的一部分。我们的构建是使用NAnt控制的,每次构建时输出都会被发送到不同的位置(基于变更集编号,因此我们可以使并发构建没有冲突) - 即dll不在相对于源代码的固定路径中。
我已经在NAnt脚本中添加了一个目标来调用SHFB,SHFB调用msbuild任务,指向包含SHFB项目的解决方案:
<target name="GenerateDocumentation">
<msbuild
project="${SourceURL}\Documentation\API Documentation\APIs.sln"
verbosity="Detailed">
<property name="OutputPath" value="${OutputPath}Documentation" />
<property name="ReferencePath" value="${OutputPath}wwwroot\\bin\\" />
</msbuild>
</target>
我已经指定了ReferencePath属性,就像this page一样,它似乎表明这将允许SHFB查找程序集并使用它们,而不是依赖原始项目文件中的信息:
如果定义了ReferencePath属性,则在生成反射信息时,它将传递给GenerateRefInfo.proj并由其使用。这允许您指定一个备用路径,在该路径中可以查找将覆盖项目文件中的提示路径的引用程序集。
但是,当构建到达此时,它将失败,并显示以下错误:
SHFB:错误BE0040:项目程序集不存在:D:\ Build \ Debug \ wwwroot \ bin \ MyAssembly.dll
这是原始项目中指定的默认输出路径。
将程序集的位置传递给SHFB的正确机制是什么?
答案 0 :(得分:0)
事实证明,使用OutDir而不是ReferencePath是可行的方法:
<target name="GenerateDocumentation">
<msbuild
project="${SourceURL}\Documentation\API Documentation\APIs.sln"
verbosity="Detailed">
<property name="OutputPath" value="${OutputPath}Documentation" />
<property name="OutDir" value="${OutputPath}wwwroot\bin\\" />
</msbuild>
</target>
另请注意,OutDir中指定的路径必须以双斜杠结尾,否则MSBuild会尝试将其与项目路径连接