我有一台在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
构建服务器但没有运气。
有什么想法吗?
答案 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错误。
提醒:另请注意,有一个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