2010-08-25 70 views
13

我有一个在Windows Server 2003上运行的CruiseControl .NET构建服务器,我尝试使用msbuild构建和发布我的ClickOnce应用程序。Clickonce引导程序和msbuild问题

一切工作正常,除非我启用我的ClickOnce应用程序的引导程序。发生这种情况时,我得到的DeploymentGenerateBootstrapper目标以下错误:

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets (3939,9): 

error MSB3147: 

Could not find required file 'setup.bin' in 'E:\Projects\src\TestProject\Engine'. 

的.NET Framework 3.5 SP1和4以及最新的Windows SDK的都被安装在服务器上,但在C引导程序文件夹:\ Program Files \ Microsoft SDKs \ Windows \ versionNo \不存在。我试图从工作站机器上复制文件,但没有运气。

我不想在服务器上安装Visual Studio,只安装必要的SDK。

我也试图从我的机器

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper 

C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper 

复制bootsrapper文件夹来构建服务器,但没有运气。

任何想法?

+0

复制文件我也试图从我的机器复制该文件夹bootsrapper C:\ Program Files文件\微软的SDK \的Windows \ v6.0A \引导程序 C:\ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ Bootstrapper 建立服务器,但没有运气。 – nabeelfarid 2010-08-25 15:25:47

+0

这个解决方案为我工作了4小时,试图使它工作: [获取Visual Studio C#Express for bootstrapper/engine/setup.bin](http://www.microsoft.com/express/Downloads/#2010-Visual -CS) – zproxy 2011-03-26 16:21:13

+0

也为我工作。谢谢。 – rob 2011-04-28 13:33:53

回答

15

您还必须将相关的键和值添加到注册表以允许MSBuild找到Bootstrapper文件夹的路径。我可以证实,这对我使用下面的注册表编辑器起作用。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\GenericBootstrapper\4.0] 
@="0" 
"Path"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Bootstrapper\\" 

更新:据艾玛的TFS博客出现下面的注册表值,以便找到引导程序路径检查,如果没有发现看在引擎子文件夹下您的本地项目文件夹,然后捞出如果在那里找不到MSB3147错误。

  1. HKLM \ SOFTWARE \微软\ GenericBootstrapper \ < .NET工具版本> \
  2. HKLM \ SOFTWARE \ Microsoft.NetFramework \ SDKInstallRoot \引导程序
  3. HKLM \ SOFTWARE \微软\ VisualStudio的\\安装目录\引导程序

提醒:还记得,有32位和64位注册表所以一定要将此值添加到您的工具将访问相同的注册表。

在此期间,我还创建了一个feature request以获得此问题的更合理的解决方案。请对我的功能请求进行投票,以便让Microsoft查看它。

顺便说一句,这里有关于这个问题的几个环节:

+3

在64位系统上,注册表项在HKLM \ Software \ Wow6432Node \ Microsoft \下 - 请参阅http://netpl.blogspot.com.au/2011/02/msb3147-could-not-find-required-file- on.html – 2012-08-30 04:29:43

6

您还可以通过引导程序包的位置,以共同Publish目标是这样的:

<PropertyGroup> 
    <BootstrapperSdkPath>C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\Bootstrapper</BootstrapperSdkPath> 
</PropertyGroup> 

然后

<Target Name="Publish"> 
    <MSBuild Targets="publish" ... Properties="GenerateBootstrapperSdkPath=$(BootstrapperSdkPath); ..."/> 
</Target> 
+1

花了无数小时尝试解决这个问题的所有其他解决方案后,这工作,并且非常简单。谢谢。 – 2013-05-03 02:08:25

3

我与Win7的X64机器上同样的问题挣扎。我还没有安装Visual Studio,并试图构建和发布.NET 4.5 WPF解决方案。我不得不将以下密钥添加到注册表中

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\GenericBootstrapper\11.0] 
"Path"="C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.1A\\Bootstrapper\\" 

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\GenericBootstrapper\4.0] 
"Path"="C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.1A\\Bootstrapper\\" 

您还需要从开发机器复制Bootstrapper文件夹。这篇博文指导我在正确的方向http://www.wiktorzychla.com/2013/11/msb3147-could-not-find-required-file-on.html

2

我有一个类似的问题,但在我的情况下,我的盒子上安装了Visual Studio,并从Visual Studio发布工作正常。 使用msbuild.exe从命令行发布时,生成失败,出现上述错误“MSB3147无法找到所需文件'setup.bin'”。

解决方案是明确指定构建期间使用的Visual Studio版本。

<MSBuild 
    Projects="MyProject.csproj" 
    Targets="publish" 
    Properties="Configuration=Release;PublishUrl=C:\AnyFolder;VisualStudioVersion=12.0"/> 

我在Win7 x64机器上安装了Visual Studio 2013。我对这个问题的看法是,MSBuild在注册表中看错了地方。通过明确地告诉MS Build使用VS 12.0,它选择了正确的注册表位置条目,并因此选择了BootstrapperSdkPath的正确路径。

0

我通过TeamCity构建服务器遇到了同样的错误。在我的情况下,原因是我正在使用'MyProject:publish'目标对我的.sln文件运行MSBuild任务。在这种情况下,solution + projecth已经更新为目标.NET v4.5,但构建服务器仍然配置为使用MSBuild Tools 4.0和.NET v4.0。

花了我一点时间来解决工作和非工作分支构建之间的不一致问题。

0

我将此行添加到脚本。它有帮助。

call "%VS120COMNTOOLS%vsvars32.bat" 

Visual Studio 2013,SDK v8.1A。

1

我能够从这个位置指向MSBuild.exe

C到解决这个问题:\程序文件(x86)\的MSBuild \ 12.0 \斌\的MSBuild。EXE

以前我是指着

C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ MSBuild.exe

1

您好我知道这个回答其soooooo晚但以防万一

我不得不路径道具添加到任务,与其中引导程序位于它的路径,在我的情况下,我使用的Visual Studio 2015年这样的路径是:

**程序文件(x86)\微软的Visual Studio 14.0 \ SDK \ Boostrapper **

的MSBuild有一个任务GenerateBootstrapper在我的情况

<GenerateBootstrapper> 
     AplicationFile="$(AppName)" 
     ApplicationName=.. 
     ApplicationUrl=.. 
     BootstrapperItems=.. 
     Culture=.. 
     ApplicationUrl=.. 
     Path="Program Files(x86)\Microsoft Visual Studio 14.0\SDK\Boostrapper\" 
    </GenerateBootstrapper> 

与此有关的MSBuild能够识别并生成文件

现在我stucked与.NET 4的引导程序,但猜测是另一个故事...

0

与这个自己只是挣扎 - 我选择犯引导程序文件源码e控制。可以覆盖引导程序的路径,只需提供/p:GenerateBootstrapperSdkPath=.build\Bootstrapper

然后不需要修改注册表 - 以及构建现在自包含的额外好处。

只有“问题”是我必须手动将Bootstrapper文件复制到源代码管理。在我的情况(VStudio2015),这意味着从C:\Program Files (x86)\Microsoft Visual Studio 14.0\SDK\Bootstrapper