我无法在VS2010中为Windows服务项目构建安装项目。它失败并出现此错误:
无法找到所需文件' setup.bin'在&C; \ MyProject \ Engine'。
我的环境是 Windows 7 Professional x64 ,其中包含 Visual Studio 2010版本10.0.40219.1 SP1Rel
我已下载Microsoft Windows SDK for Windows 7 and .NET Framework 4,已修复,然后重新启动,然后安装了除Visual C ++编译器之外的未经检查的组件,然后安装了KB2519277。
这些是现有的注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\GenericBootstrapper\3.5
Path = c:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\Bootstrapper\
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\GenericBootstrapper\4.0
Path = c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\
这些是现有文件:
C:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Engine\setup.bin
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Engine\setup.bin
现有的解决方法是将Engine目录复制到项目目录,但每次创建新项目时都必须这样做。
如何正确修复?
答案 0 :(得分:22)
使用Process Monitor我发现,在尝试访问路径之前,会使用DLL来检索此路径。以下可能是临界合法的,但无论如何我想分享我的发现。
DLL位于C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll
,正在使用的类是Microsoft.Build.Tasks.Deployment.Bootstrapper.BootstrapperBuilder
。使用您最喜欢的反汇编工具,您可以发现在检索路径时最终会尝试三次。
我不确定为什么它会说 11.0 ,据我所知,VS 2012还没有安装在这台机器上。
因此SDK安装程序中存在错误或DLL中存在错误。无论哪种方式,创建 11.0 注册表项并添加该值都可以解决此问题。注意:必须重新启动Visual Studio,因为在尝试检索路径后,它将被缓存。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\GenericBootstrapper\11.0]
"Path"="C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\Bootstrapper\\"
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\GenericBootstrapper\11.0]
"Path"="C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\Bootstrapper\\"
答案 1 :(得分:15)
在走下兔子洞之前,确认你需要引导程序。如果不这样做,则可以通过执行以下操作之一将其关闭。这也将解决错误。
GUI方式:
Properties
Publish
标签Prerequisites...
按钮Create setup program to install prerequisite components
这个答案来自post。
手动修改csproj
文件方式:
<BootstrapperEnabled>false</BootstrapperEnabled>
添加到第一个<PropertyGroup>
元素的底部答案 2 :(得分:5)
这个解决方案对我有用(VS 2013):http://www.codewrecks.com/blog/index.php/2014/05/31/error-msb3147-could-not-find-required-file-setup-bin-in/
将msbuild.exe的PATH更改为:C:\Program Files (x86)\MsBuild\12.0\Bin\msbuild.EXE
答案 3 :(得分:5)
答案 4 :(得分:1)
这是一个多步骤解决方案。
首先确保安装了.Net SDK。
然后确保存在以下注册表项:
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\GenericBootstrapper\11.0
它必须包含一条路径&#39;具有指向引导程序位置的值的条目:
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\Bootstrapper\
以下powershell脚本为您完成此任务:
$registryPath = "Registry::HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\GenericBootstrapper\11.0"
$registryValue = "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\Bootstrapper\"
function CreateRegistryValues {
if(-not (Test-Path $registryPath ) )
{
Push-Location
Set-Location -Path Registry::HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\GenericBootstrapper
# First add the registry item
New-Item -Name '11.0' -Value $registryValue
#Then add a property on it for 'Path' and the folder in bootstrapper that contains the 'Engine' folder
New-ItemProperty `
-Path $registryPath `
-Name 'Path' `
-PropertyType String `
-Value $registryValue
Pop-Location
}else{
Write-Warning "You already have the registry key ($registryPath) set. `r`n No action was taken `r`n "
}
}
最后,您必须复制“引擎”的内容。文件夹作为Visual Studio工具的一部分包含在注册表值中列出的位置:
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\Bootstrapper\"
答案 5 :(得分:0)
我对问题的解决方案:无法发布,因为无法找到setup.bin
在vs2008中使用PUBLISH向导时,无法发布应用程序,因为找不到setup.bin。
简短的回答是:
将engine
文件夹粘贴到vs2008 IDE中ERROR消息中指示的位置。
可以在engine
文件夹中找到Microsoft SDKs
文件夹。
答案很长:
就我而言,vs2008正在寻找C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\engine\
中的setup.bin。
此位置在vs2008 IDE中的错误中显示。
engine
文件夹在上述位置不存在,因为engine
文件夹不存在。
engine
文件夹实际上位于C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Engine
。
通过在注册表中搜索setup.bin
的搜索,找到了此engine
文件夹位置
我从engine
文件夹中复制了Microsoft SDKs
文件夹并将其粘贴到Microsoft Visual Studio 9.0
文件夹中。
此文件夹副本解决了问题,并允许我发布应用程序。
以下是我采取的具体步骤:
在注册表中搜索setup.bin
在注册表中找到setup.bin时,检查密钥并记下setup.bin的文件夹位置(在我的情况下,这是C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Engine
)
在VS2008 IDE中,查看“错误”窗口并记下setup.bin错误的文件夹位置(在我的情况下,这是C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\engine\
)
vs2008 IDE期望setup.bin位于C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\engine\
,但是
此engine
文件夹不存在
从engine
复制C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Engine
文件夹,并将此文件夹粘贴到C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\