clickonce bootstrapper和msbuild的问题

时间:2010-08-25 15:25:36

标签: msbuild clickonce winapi

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

除非我启用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 \中的bootstrapper文件夹不存在。我试着从我的工作站机器上复制文件而没有运气。

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

我也尝试从我的机​​器上复制bootsrapper文件夹

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

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

构建服务器但没有运气。

有什么想法吗?

9 个答案:

答案 0 :(得分:15)

您还必须将关联的键和值添加到注册表,以允许MSBuild查找Bootstrapper文件夹的路径。我可以使用以下注册表确认这对我有用。

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

更新:根据Emma的TFS博客,系统会显示以下注册表值,以便找到引导程序路径,如果找不到,则会在Engine子文件夹下的本地项目文件夹中查找如果在那里找不到MSB3147错误。

  1. HKLM \ Software \ Microsoft \ GenericBootstrapper \< .NET工具版> \
  2. HKLM \ Software \ Microsoft.NetFramework \ SDKInstallRoot \ Bootstrapper
  3. HKLM \ Software \ Microsoft \ VisualStudio \\ InstallDir \ Bootstrapper
  4. 提醒:另请注意,有一个32位和64位注册表,因此请务必将此值添加到您的工具将访问的同一注册表中。

    与此同时,我还创建了一个feature request来为这个问题找到更合理的解决方案。请对我的功能请求进行投票,以便微软查看它。

    顺便说一下,这里有一些关于这个问题的链接:

答案 1 :(得分: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>

答案 2 :(得分: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

答案 3 :(得分:2)

我遇到了类似的问题,但在我的情况下,我确实在盒子上安装了Visual Studio,从Visual Studio发布工作正常。 使用msbuild.exe从命令行发布时,构建失败并出现上述错误&#34; MSB3147无法找到所需文件&#39; setup.bin&#39;&#34;。

解决方案是明确指定在构建期间使用的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路径。

答案 4 :(得分:1)

我能够通过从此位置指向MSBuild.exe来解决此问题

  

C:\ Program Files(x86)\ MSBuild \ 12.0 \ Bin \ MSBuild.exe

以前我指的是

  

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

答案 5 :(得分:1)

嗨,我知道这个答案太迟了,但以防万一

我不得不将Path prop添加到任务中,使用其所在的引导程序路径,在我的情况下,我使用Visual Studio 2015,因此路径为:

**程序文件(x86)\ Microsoft Visual Studio 14.0 \ SDK \ Boostrapper **

MSBuild在我的案例中有一个Task GenerateBootstrapper

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

这样,MSBuild就能识别并生成文件

现在我对.net 4引导程序感到不满,但猜猜是另一个故事......

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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

call "%VS120COMNTOOLS%vsvars32.bat"

Visual Studio 2013,SDK v8.1A。

答案 8 :(得分:0)

我自己也在苦苦挣扎 - 我选择将引导程序文件提交给源代码控制。可以覆盖bootstrappers的路径,只需提供/p:GenerateBootstrapperSdkPath=.build\Bootstrapper

即可

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

只有&#34;问题&#34;是我必须手动将Bootstrapper文件复制到源代码管理中。就我而言(VStudio2015),这意味着从C:\Program Files (x86)\Microsoft Visual Studio 14.0\SDK\Bootstrapper

复制文件