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

use*_*702 28 .net-4.0 visual-studio

对于Windows服务项目,我无法在VS2010中构建安装项目.它失败并出现此错误:

在'C:\ MyProject\Engine'中找不到所需的文件'setup.bin'.

我的环境是带有Visual Studio 2010版本10.0.40219.1 SP1Rel的Windows 7 Professional x64

我已经下载了适用于Windows 7和.NET Framework 4的Microsoft Windows SDK,已修复,然后重新启动,然后安装了除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\
Run Code Online (Sandbox Code Playgroud)

这些是现有文件:

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
Run Code Online (Sandbox Code Playgroud)

现有的解决方法是将Engine目录复制到项目目录,但是每次创建新项目时都必须这样做.

如何正确修复?

use*_*702 23

使用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

我不确定为什么它说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\\"
Run Code Online (Sandbox Code Playgroud)
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\\"
Run Code Online (Sandbox Code Playgroud)

  • 我使用了第二个键(带有"Wow6432Node"),因为我没有"SOFTWARE\Microsoft\GenericBootstrapper".由于我有Visual Studio 2013 Update 1,因此我还将v7.0A更改为v8.1A (3认同)
  • 这仍然是有用的,但现在只需要一个你不需要使用反汇编程序的说明就在GitHub上:[GenerateBootsrapper.cs](https://github.com/Microsoft/msbuild/blob/c1459f5cbd36f2c33eafc8f4ff087f6ee84c3640/src/XMakeTasks /GenerateBootstrapper.cs) (2认同)
  • 相关文件是[Util.cs](https://github.com/Microsoft/msbuild/blob/c1459f5cbd36f2c33eafc8f4ff087f6ee84c3640/src/XMakeTasks/BootstrapperUtil/Util.cs),它查找当前的VS版本密钥*或*'default' 4.0键(例如,从SDK msbuild.exe构建时,它寻找4.0). (2认同)

Rya*_*tes 15

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

GUI方式:

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

项目属性

这个答案来自这篇文章.

手动编辑csproj文件方式:

  1. 添加<BootstrapperEnabled>false</BootstrapperEnabled>到第一个<PropertyGroup>元素的底部


teo*_*omi 5

这个解决方案对我有用(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


Tro*_*ers 5

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

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

/property:VisualStudioVersion=12.0;
Run Code Online (Sandbox Code Playgroud)

构建定义中的MSBuild参数