使用团队构建功能构建带有bootstrapper的ClickOnce应用程序

(English Version

当使用团队构建(Team Build)来构建带有bootstrapper的ClickOnce应用程序时,构建过程可能会失败,日志中带有如下错误信息(采自英文版)

“C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(3604,9): error MSB3147: Could not find required file 'setup.bin' in 'BuildAgent_work_folder\Sources\Project_Root\Engine'. “ 

这个错误来自MSBuild的一个构建任务GenerateBootstrapper。该任务从构建服务器本机寻找产生bootstrapper setup.exe 文件的资源文件。对资源文件 (setup.bin及其相关文件)的搜索是通过依次查询下列注册表键值进行的:

1. HKLM\Software\Microsoft\GenericBootstrapper\1.0\path

2. HKLM \Software\Microsoft\.NetFramework\SDKInstallRoot<Version> \Bootstrapper

3. HKLM \Software\Microsoft\VisualStudio\ <Version> \InstallDir\Bootstrapper

 

在搜索过程的每一步,如果该注册表值存在,则MSBuild使用该值指向的路径作为bootstrapper资源文件路径。否则继续按顺序查找下去。三个注册表值都未设置的话,MSBuild会使用正在构建的ClickOnce项目的根路径作资源文件路径。MSBuild查找资源文件安装路径下的\engine\setup.bin文件。如果文件找不到,就会报MSB3147 错误。

bootstrapper相关文件是.Net Framework SDK的一部分。该SDK安装的时候拷贝一组文件到本地硬盘,并设置注册表。没有安装这个SDK的计算机上,三个注册表值都不会被设置。这种情况下MSBuild最终会在正在构建的ClickOnce项目的根路径下搜寻并在此报错。

解决方案是在团队构建服务器上安装.Net Framework SDK 。 如果安装windows SDK或Visual Studio集成开发环境,.Net Framework SDK 也会自动作为其中一部分被安装。