31

I'm unable to build a Setup Project in VS2010, for a Windows Service project. It fails with this error:

Could not find required file 'setup.bin' in 'C:\MyProject\Engine'.

My environment is Windows 7 Professional x64 with Visual Studio 2010 Version 10.0.40219.1 SP1Rel

I've downloaded Microsoft Windows SDK for Windows 7 and .NET Framework 4, repaired, then rebooted, then installed the unchecked components except Visual C++ compiler, then installed KB2519277.

These are the existing registry entries:

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\

These are the existing files:

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

An existing workaround is to copy the Engine directory to the project directory, however this has to be done every time you make a new project.

How can this be fixed properly?

4

7 回答 7

24

使用 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\Microsoft\GenericBootstrapper\11.0\Path
  2. HKLM\Software\Wow6432Node\Microsoft\GenericBootstrapper\11.0\Path
  3. 环境.当前目录

我不确定为什么它说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\\"
于 2012-06-28T13:52:33.517 回答
19

在进入兔子洞之前,请确认您需要引导程序。如果不这样做,则可以通过执行以下操作之一将其关闭。这也将解决错误。

GUI方式:

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

项目属性

这个答案来自这篇文章

手动编辑csproj文件方式:

  1. 添加<BootstrapperEnabled>false</BootstrapperEnabled>到第一个<PropertyGroup>元素的底部
于 2015-08-27T14:21:11.003 回答
6

这个解决方案对我有用(VS 2013): http: //www.codewrecks.com/blog/index.php/2014/05/31/error-msb3147-could-not-find-required-file-setup-bin-在/

将 msbuild.exe 的 PATH 更改为:C:\Program Files (x86)\MsBuild\12.0\Bin\msbuild.EXE

于 2015-07-24T13:06:38.127 回答
6

我在 TFS 构建时遇到了同样的问题。

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

/property:VisualStudioVersion=12.0;

构建定义中的 MSBuild 参数

于 2016-08-18T10:01:43.193 回答
2

这是一个多步骤的解决方案。

首先确保您已安装 .Net SDK。

然后确保存在以下注册表项: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\GenericBootstrapper\11.0

它必须包含一个“路径”条目,其值指向引导程序的位置: 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 工具中的“Engine”文件夹的内容复制到注册表值中列出的位置:

C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\Bootstrapper\" 
于 2017-11-09T00:08:07.407 回答
0

我的问题解决方案:无法发布,因为找不到 setup.bin

在 vs2008 中使用 PUBLISH 向导时,由于找不到 setup.bin,无法发布应用程序。


简短的回答是:

将文件夹粘贴engine到 vs2008 IDE 中的错误消息中指示的位置。

engine文件夹可以在文件夹中找到Microsoft SDKs


长答案是:

就我而言,vs2008 正在寻找 setup.bin 中的C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\engine\.

此位置在 vs2008 IDE 中的错误中指示。

engine文件夹在上述位置不存在,因为该engine文件夹不存在。

engine文件夹实际上位于C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Engine.

engine通过在注册表中搜索 setup.bin 找到此文件夹位置

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 中,查看 ERROR 窗口并记下 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,然后将此文件夹粘贴到 IDE 文件夹中C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\

于 2017-10-17T16:56:30.090 回答
0

我一直在努力解决这个问题。

解决方案非常简单。您必须在 Visual Studio 或 Visual Studio 构建工具中安装“clickonce 构建工具”。它是一个小组件,通常不会自动选择。

于 2022-01-20T02:53:59.507 回答