TFS MSBuild:$(ProjectDir)为空或随机

4

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

Helpertask.exe $(ProjectDir)

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

到目前为止,我设法找到的最佳解决方法是硬编码开发者和服务器路径:

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

这个技巧适用于构建步骤,但不适用于构建步骤(在MSBuild下,预构建任务现在根本不起作用!)。你有任何修复或解决方法吗?我已经几乎没有头发了!
5个回答

11

$(MSBuildProjectDirectory) 对我很有用


1

谢谢,Sayed。问题不在于我们正在创建新文件,而是用于创建它们的程序甚至没有被执行。有一次,$(ProjectDir)完全错误,但这肯定是配置不正确导致的,因为当我调整项目时,问题消失了。浪费了一整天的时间尝试让这个简单的东西工作,我放弃了并从我们的构建中删除了代码生成步骤 - 现在只是开发人员在更改源文件时必须手动执行的步骤(这是一个罕见的事件)。 - Jason Williams
如果在进入目标之前无法获得ProjectDir,那么您将如何指定相对于ProjectDir的目标InputsOutputs - John Leidegren

0

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


奇怪的是这是个间歇性问题,我几周前看到了它,今天又出现了。在构建步骤中添加 "echo $(ProjectDir)" 后,它输出了正确的值,并且已经开始工作了。最神秘的是,我开始怀疑是 pre-build 步骤没有被执行(它记录正在执行 pre-build 步骤,但构建在步骤之后继续进行,而其中的任何命令都没有被执行),而不是 $(ProjectDir) 出了问题。 - Jason Williams

0

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

一旦 $(ProjectDir) 再次正常工作,预构建步骤就停止执行命令(我在它上面和下面添加了 echo 命令 - 它们都被执行了,但是它们之间的程序没有被执行。没有任何错误或输出来指示为什么失败)。

我不知道这是一个有问题的服务器还是 MSBuild 在跟我开玩笑。

我现在已经放弃了。我狠狠地踢了一下构建服务器,并改变了策略:我们现在离线(手动)运行此工具,并检查生成服务器使用的结果。自动化构建就这样结束了 :-( 如果 MSBuild 能够像 Visual Studio 一样运行解决方案,那该多好啊 - 它设置了完全不同的环境(不同路径从解决方案变量中出来,输出被重定向到不同的文件夹中,因此你无法找到它们在哪里应该在的位置,等等)。


0

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

Carlos A Merighe


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接