【问题标题】:$(SolutionDir) MSBuild property incorrect when running Sandcastle Help File Builder via CMD$(SolutionDir) 通过 CMD 运行 Sandcastle 帮助文件生成器时 MSBuild 属性不正确
【发布时间】:2015-12-02 19:52:43
【问题描述】:

当我使用 Windows CMD 运行 Sandcastle Help File Builder 项目文件(例如,myproject.shfbproj)时,我遇到了一个烦人的问题:$(SolutionDir)$(ProjectDir) 具有相同的值,这意味着项目文档源无法正确构建,因为我正在添加已经使用 $(SolutionDir) 的自定义目标。

如果我从 Visual Studio 构建整个 Sandcastle 帮助文件生成器,它将成功构建。

我正在使用以下命令(从存储项目的目录执行):

"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" /p:Configuration=Development myproject.shfbproj

有解决办法吗?

【问题讨论】:

  • 您使用的命令行是什么? msbuild myproject.shfbproj?
  • @m0sa 是的,并提供一个属性来定义构建配置
  • @m0sa 我更新了我的 Q 来给你完整的命令。
  • 在大多数情况下,您可以使用“$(ProjectDir)\..”而不是“$(SolutionDir)”

标签: .net cmd msbuild sandcastle shfb


【解决方案1】:

虽然@m0sa 指出了一个非常明显的事实(因为我正在构建 Sandcastle Help File Builder 项目,因此没有实际的解决方案目录),但在构建解决方案时在 TFS 构建期间也发生了问题,其中 -称为文档项目所在的位置。

现在我已经设法使用 讨厌的 解决方法解决了这个问题:在每个需要作为文档项目的一部分构建的 C# 项目中添加一个 SolutionDir 属性:

  <PropertyGroup>
    <SolutionDir>$([System.IO.Path]::GetDirectoryName($(MSBuildProjectDirectory)))\</SolutionDir>
  </PropertyGroup>

由于我的解决方案文件将始终位于 Sandcastle Help File Builder 项目目录的父目录中,因此在我的情况下,此解决方法有效...

现在作为文档源引用的项目能够导入自定义项目,我在其中定义了常见的 MSBuild 属性,无论是在 Visual Studio 构建中还是在外部构建中:

<Import Project="$(SolutionDir)MSBuild\Common.properties" />

【讨论】:

  • 我认为将其中一些变量默认定义为微软的预定义变量会更好。
【解决方案2】:

如果您正在构建解决方案(.sln 文件),您只能获得正确的 $(SolutionDir).shfbproj 是一个项目文件,因此没有引用其父解决方案。您可以尝试在命令行中明确指定$(SolutionDir)

msbuild /p:Configuration=Development /p:SolutionDir=MySolutionDir myproject.shfbproj

供参考:$(SolutionDir) and MSBuild

【讨论】:

  • 我试过这个没有运气。在我需要正确的$(SolutionDir) 值之前,我设法解决了在每个 csproj 中定义整个解决方案目录的问题..
  • 需要报价才能为我工作 - /p:SolutionDir="MySolutionDir" 而不是 /p:SolutionDir=MySolutionDir
  • 这也适用于运行msbuild /target:Package xxx.csproj
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多