Вопрос по visual-studio, .net-4.0 – Не удалось найти необходимый файл «setup.bin»

28

Мне не удается создать проект установки в VS2010 для проекта службы Windows. Это терпит неудачу с этой ошибкой:

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

Моя средаWindows 7 Professional x64 сVisual Studio 2010 Version 10.0.40219.1 SP1Rel

Я скачалMicrosoft Windows SDK для Windows 7 и .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 в каталог проекта, однако это необходимо делать каждый раз, когда вы создаете новый проект.

Как это можно исправить правильно?

@AtillaOzgur Только что попробовал, все еще получаю ошибку. Stijn
Вы пытались добавить эти каталоги в значение среды PATH? Atilla Ozgur

Ваш Ответ

6   ответов
5

У меня была такая же проблема со сборкой TFS.

Вы можете решить проблему, установив версию Visual Studio в аргументах MSBuild сборки определения:

/property:VisualStudioVersion=12.0;

MSBuild arguments in build definition

1

Это многошаговое решение.

Сначала убедитесь, что у вас установлены .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, в папку, указанную в значении реестра:

C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\Bootstrapper\" 
15

Прежде чем спуститься в кроличью нору, убедитесь, что вам нужен загрузчик. Если вы этого не сделаете, вы можете отключить его, выполнив одно из следующих действий. Это также устранит ошибку.

The GUI way:

Right Click on the Project Click Properties Click the Publish Tab on the left Click the Prerequisites... button Uncheck Create setup program to install prerequisite components

Project Properties

Этот ответ пришел от этогосообщение.

The manually edit csproj file way:

Add <BootstrapperEnabled>false</BootstrapperEnabled> to the bottom of the first <PropertyGroup> element
Спасибо - это также можно сделать, установив & lt; BootstrapperEnabled & gt; false & lt; / BootstrapperEnabled & gt; прямо внутри csproj
Только в конце самой первой & lt; PropertyGroup & gt; в csproj
@rudolf_franek спасибо, что сообщили мне об этом. Я обновил ответ, чтобы помочь кому-либо еще читать это в будущем.
@rudolf_franek где в csproj следует<BootstrapperEnabled/> элемент будет добавлен?
0

МОЕ РЕШЕНИЕ ПРОБЛЕМЫ: невозможно опубликовать, потому что не найден файл setup.bin

При использовании мастера публикации в vs2008 приложение не может быть опубликовано, поскольку файл setup.bin не найден.

Краткий ответ:

Вставьтеengine в папку, указанную в сообщении об ошибке в IDE vs2008.

engine папку можно найти вMicrosoft SDKs папка.

Длинный ответ:

В моем случае vs2008 искал setup.bin вC:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\engine\.

Это местоположение было указано в ошибке в IDE vs2008.

engine папка не существует в указанном выше месте, потому чтоengine папки там не было.

engine папка была на самом деле вC:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Engine.

этоengine местоположение папки было найдено путем поиска в реестре вхождения setup.bin

Я скопировалengine папка изMicrosoft SDKs папку и вставил его вMicrosoft Visual Studio 9.0 папка.

Эта копия папки разрешила проблему и позволила мне опубликовать приложение.

Вот конкретные шаги, которые я предпринял:

Search the registry for setup.bin

When setup.bin is found in the registry, inspect the key and note the folder location of setup.bin (in my case this was C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Engine)

In the VS2008 IDE, look in the ERROR window and note the folder location for the setup.bin error (in my case this was C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\engine\)

The vs2008 IDE was expecting setup.bin to be in C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\engine\, but this engine folder did not exist

Copy the engine folder from C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Engine, and paste this folder into the IDE folder at C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\

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, Используя ваш любимый инструмент для разборки, вы можете обнаружить, что в конечном итоге делается три попытки получения пути.

HKLM\Software\Microsoft\GenericBootstrapper\11.0\Path HKLM\Software\Wow6432Node\Microsoft\GenericBootstrapper\11.0\Path 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\\"
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\\"
Я использовал второй ключ (с «Wow6432Node»), поскольку у меня нет «ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ \ Microsoft \ GenericBootstrapper». Я также изменил v7.0A на v8.1A, так как у меня Visual Studio 2013, обновление 1
У меня была похожая проблема, за исключением того, что я видел немного другое поведение, чем вы. Я изменил мой MSBuildToolsVersion быть4.0 так так:<Project ToolsVersion="4.0" xmlns="http://... и все это работало нормально без взлома реестра.
соответствующий файлUtil.cs который ищет текущий ключ версии VSor «по умолчанию» Ключ 4.0 (например, при сборке из SDK msbuild.exe он ищет 4.0).
Это по-прежнему полезно, но на GitHub есть только примечание, что в настоящее время вам не нужно использовать дизассемблер:GenerateBootsrapper.cs
Также @ ta.speot.is ...how Вы изменили свой MSBuild ToolsVersion? Какой файл вы редактируете?
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 на:C:\Program Files (x86)\MsBuild\12.0\Bin\msbuild.EXE

Похожие вопросы