【问题标题】:TFS MSBuild: $(ProjectDir) blank or randomTFS MSBuild:$(ProjectDir) 空白或随机
【发布时间】:2009-06-12 09:50:28
【问题描述】:

我有一个 vcproj 文件,其中包含一个简单的预构建事件:

Helpertask.exe $(ProjectDir)

这在开发人员 PC 上运行良好,但是当解决方案在我们的 TFS 2008 构建服务器上构建在 MSBuild 下时,$(ProjectDir) 要么为空,要么指向服务器上不相关的文件夹!

到目前为止,我管理的最佳解决方法是硬编码开发人员和服务器路径:

if exist C:\DeveloperCode\MyProject   HelperTask.exe C:\DeveloperCode\MyProject
if exist D:\BuildServerCode\MyProject HelperTask.exe D:\BuildServerCode\MyProject

此 hack 在 post-build 步骤中有效,但不适用于 pre-build 步骤(Pre-build 任务现在在 MSBuild 下什么都不做!)

您对修复或解决方法有任何想法吗?我的头发很少了!

【问题讨论】:

    标签: tfs msbuild


    【解决方案1】:

    $(MSBuildProjectDirectory) 为我工作

    【讨论】:

      【解决方案2】:

      我认为您的问题可能与项目的初始化方式有关。项目包含属性在构建开始时进行评估。因此,如果您依赖于在构建过程中创建的文件,则必须将它们声明为动态项。动态项是在目标内部或通过使用 CreateItem 任务定义的那些。我已经在我的博客MSBuild: Item and Property Evaluation 上详细说明了这一点。

      赛义德·易卜拉欣·哈希米

      我的书:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build

      【讨论】:

      • 谢谢赛义德。问题不在于我们正在创建新文件,而只是创建它们的程序甚至没有被执行。有一次, $(ProjectDir) 完全错误,但这一定是配置不正确,因为当我摆弄项目时问题消失了。浪费了一天中最好的时间来尝试让这个简单的东西工作,我放弃并从我们的构建中删除了代码生成步骤 - 现在它只是开发人员在更改源文件时必须执行的手动步骤(很少见无论如何都会发生)。
      • 如果在您实际输入目标之前不可用,那么您将如何指定目标InputsOutputs 相对ProjectDir
      【解决方案3】:

      我认为问题在于构建服务器的工作区可能没有正确初始化。

      【讨论】:

      • 奇怪的是,这是一个间歇性问题。几周前我看到了,今天又看到了。将“echo $(ProjectDir)”添加到构建步骤后,它会打印出正确的值并再次开始工作。最神秘。我开始怀疑不是 $(ProjectDir) 被破坏了,而是预构建步骤没有被执行(它记录它正在执行预构建步骤,但是构建继续通过该步骤而没有任何其中的命令已经执行)
      【解决方案4】:

      我只是不断遇到问题 - 我尝试了许多不同的方法,但它们都以神秘的方式失败了。

      一旦 $(ProjectDir) 再次开始正常运行,预构建步骤停止执行命令(我在其上方和下方添加了 echo 命令 - 它们都已执行,但它们之间的程序没有。没有错误或输出生成任何类型的内容以指示失败的原因)。

      我不知道这是否是一个狡猾的服务器,如果 MSBuild 笑了。

      我现在已经放弃了。我给了构建服务器一个很大的帮助并改变了策略:我们现在离线(手动)运行这个工具并检查结果以供构建服务器使用。自动化构建就这么多:-(如果只有 MSBuild 会以与 Visual Studio 相同的方式运行解决方案 - 令人抓狂的是,它完全不同地设置环境(来自解决方案变量的不同路径,输出重定向到不同的文件夹,所以你找不到他们应该在的地方,等等)

      【讨论】:

        【解决方案5】:

        我对现有项目进行了分支,并且 $(ProjectDir) 将旧目录保留在新分支的代码中。但那是因为我有一些编译错误。一旦解决方案中的每个项目都正确编译,$(ProjectDir) 就会更改为正确的路径。

        卡洛斯·梅里赫

        【讨论】:

          猜你喜欢
          • 2011-01-18
          • 1970-01-01
          • 2013-05-28
          • 1970-01-01
          • 2023-04-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-04
          相关资源
          最近更新 更多