1

当我们通过 MSBuild 运行构建时,MSBuild 在什么上下文中运行?

我问的原因是因为我有调用命令行程序(ajax 缩小)的预构建事件,如果项目是通过 VS2010(在同一台机器上)构建的,它可以完美运行,但是当我们的构建系统(CCNet ) 正在构建它。我得到的错误是 9009,这意味着它找不到文件。命令行程序为其位置设置了一个环境路径(环境路径是通过 setx 设置的,也许它只是为当前用户设置的?),所以除了 CCNet 调用 MSBuild 之外,只调用它的名称在所有情况下都可以正常工作。

4

1 回答 1

1

MSBuild就像任何其他开发工具一样,它在启动它的任何用户上下文下运行。

当您msbuild通过 Visual Studio 运行时,它会像您一样运行,因为您的登录上下文运行 Visual Studio,而 Visual Studio 又运行构建。

如果您通过某个构建服务运行它,答案将取决于该构建服务的运行方式。例如,TFS Build 以您为 TFS Build 服务的登录凭据配置的任何用户身份启动 MSBuild。如果您已将 CC.NET 配置为作为服务运行,那么您还必须指定它作为哪个用户运行。这也是 MSBuild 的运行方式。

如果您需要为构建设置特定的环境,您有几个选择。最简单的方法,虽然是一种“巨锤”方法,但在构建机器上为所有用户全局配置环境。其他选项包括在构建中运行某种预配置步骤,或编写启动批处理文件以在设置环境后手动启动服务。

于 2013-02-12T22:06:32.090 回答