找不到所需的文件'setup.bin'

时间:2012-06-21 13:42:22

标签: visual-studio .net-4.0

我无法在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目录复制到项目目录,但每次创建新项目时都必须这样做。

如何正确修复?

6 个答案:

答案 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。使用您最喜欢的反汇编工具,您可以发现在检索路径时最终会尝试三次。

  1. HKLM \ SOFTWARE \微软\ GenericBootstrapper \ 11.0 \路径
  2. HKLM \ SOFTWARE \ Wow6432Node \微软\ GenericBootstrapper \ 11.0 \路径
  3. Environment.CurrentDirectory
  4. 我不确定为什么它会说 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方式:

  1. 右键单击项目
  2. 点击Properties
  3. 点击左侧的Publish标签
  4. 点击Prerequisites...按钮
  5. 取消选中Create setup program to install prerequisite components
  6. Project Properties

    这个答案来自post

    手动修改csproj文件方式:

    1. <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)

我在使用TFS时遇到了同样的问题。

您可以通过在定义构建的MSBuild参数中设置visual studio版本来解决此问题:

/property:VisualStudioVersion=12.0;

MSBuild arguments in build definition

答案 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文件夹中。

此文件夹副本解决了问题,并允许我发布应用程序。

以下是我采取的具体步骤:

  1. 在注册表中搜索setup.bin

  2. 在注册表中找到setup.bin时,检查密钥并记下setup.bin的文件夹位置(在我的情况下,这是C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Engine

  3. 在VS2008 IDE中,查看“错误”窗口并记下setup.bin错误的文件夹位置(在我的情况下,这是C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\engine\

  4. vs2008 IDE期望setup.bin位于C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\engine\,但是 此engine文件夹不存在

  5. engine复制C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Engine文件夹,并将此文件夹粘贴到C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\

  6. 的IDE文件夹中