我是 MSBuild 的新手,我已经对我在 Visual Studio 2010 和 TFS 2010 中构建的 WPF 项目文件进行了一些自定义。我已经自定义了输出路径,如下所示:
<OutputPath Condition=" '$(TeamBuildOutDir)' == '' ">$(SolutionDir)build\binaries\$(ProjectName)\$(Configuration)\$(Platform)</OutputPath>
<OutputPath Condition=" '$(TeamBuildOutDir)' != '' ">$(TeamBuildOutDir)binaries\$(ProjectName)\$(Configuration)\$(Platform)</OutputPath>
这允许我在桌面上构建时构建到一个集中的二进制文件目录,并允许 TFS 在 CI 构建运行时找到二进制文件。
但是,似乎在这两种情况下, $(ProjectDir) 属性在构建时都评估为 '',这会产生奇怪的结果。进行一些调试时,似乎 $(ProjectName) 是在 BeforeBuild 执行时设置的,但我的 OutputPath 属性在此之前正在评估它。
<ProjectNameUsedTooEarly Condition=" '$(ProjectName)' == '' ">true</ProjectNameUsedTooEarly>
前面的属性与我的 OutputPath 属性位于同一属性组中。在 BeforeBuild 目标中,$(ProjectNameUsedTooEarly) 的计算结果为 true,但 $(ProjectName) 的计算结果为正常的项目名称。
我可以做些什么来确保 $(ProjectName) 在我使用它时有一个值?
我刚刚使用 Attrice 的 MSBuild Sidekick 来调试我的构建文件,并且在第一个可用于断点的目标 (_CheckForInvalidConfigurationAndPlatform) 中,所有属性似乎都已设置。 ProjectName 已正确设置,但我的 OutputPath 属性已使用 ProjectName 的空白值设置。
最佳答案
嗯-那里发生了一些困惑,我将尝试解决
关于visual-studio-2010 - MSBuild 何时设置 $(ProjectName) 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2647373/