【发布时间】:2013-02-12 21:47:50
【问题描述】:
当我们通过 MSBuild 运行构建时,MSBuild 在什么上下文中运行?
我问的原因是因为我有调用命令行程序(ajax 缩小)的预构建事件,如果项目是通过 VS2010(在同一台机器上)构建的,它可以完美运行,但在我们构建时不起作用系统(CCNet)正在构建它。我得到的错误是 9009,这意味着它找不到文件。命令行程序为其位置设置了环境路径(环境路径是通过 setx 设置的,也许它只为当前用户设置?),因此除了 CCNet 调用 MSBuild 之外,仅调用其名称在所有情况下都可以正常工作。
【问题讨论】:
-
预构建事件由 MSBuild Exec 类执行。它在 cmd.exe 的隐藏实例中运行命令。工作目录设置为项目的输出目录,初始环境继承自父进程。不要不使用 SETX,这不会改变环境。使用 SET。使用 PATH 更改路径。
-
你能解释一下我应该在哪里使用 SET PATH 吗?我在安装 ajax 缩小程序后使用了一次 SETX。我将如何在预构建事件中使用 SET PATH?
-
把它放在你的预构建事件中:set path=c:\foo\bar;%path%.
-
刚刚试了一下,效果很好。唯一的问题是我在我的项目文件中对路径进行了硬编码。有什么方法可以设置路径并从已经存在的全局环境路径变量中获取路径(之前由 SETX 设置的那些)
-
关于如何告诉您停止使用 SETX 的想法已经不多了。它更新注册表,而不是环境。
标签: visual-studio-2010 msbuild cruisecontrol.net pre-build-event