将动态引用传递给Sandcastle帮助文件生成器

时间:2014-06-10 11:30:50

标签: msbuild nant sandcastle shfb

我已经使用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的正确机制是什么?

1 个答案:

答案 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会尝试将其与项目路径连接