Не удалось найти файл 'setup.bin'
Я не могу построить проект установки в VS2010 для проекта службы Windows. Ошибка с этой ошибкой:
Не удалось найти требуемый файл 'setup.bin' в 'C:\MyProject\Engine'.
Моя среда - это Windows 7 Professional x64 с Visual Studio 2010 Версия 10.0.40219.1 SP1Rel
Я загрузил Microsoft Windows SDK для Windows 7 и .NET Framework 4, отремонтировал, затем перезагрузил, а затем установил непроверенные компоненты, кроме Visual С++, затем установите 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 в каталог проекта, однако это нужно делать каждый раз, когда вы создаете новый проект.
Как это можно правильно исправить?
Ответы
Ответ 1
В 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\Путь
- HKLM\Software\Wow6432Node\Microsoft\GenericBootstrapper\11.0\Путь
- 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\\"
Ответ 2
Перед тем как спуститься к кроличьей лунке, убедитесь, что вам нужен ботстраппер. Если вы этого не сделаете, вы можете отключить его, выполнив одно из следующих действий. Это также устранит ошибку.
Способ GUI:
- Щелкните правой кнопкой мыши по проекту
- Нажмите
Properties
- Нажмите вкладку
Publish
слева
- Нажмите кнопку
Prerequisites...
- Снимите флажок
Create setup program to install prerequisite components
![Свойства проекта]()
Этот ответ пришел из этого post.
Файл редактирования вручную csproj
:
- Добавьте
<BootstrapperEnabled>false</BootstrapperEnabled>
в конец первого элемента <PropertyGroup>
Ответ 3
Это решение сработало для меня (VS 2013): http://www.codewrecks.com/blog/index.php/2014/05/31/error-msb3147-could-not-find-required-file-setup-bin-in/
Измените PATH файла msbuild.exe на: C:\Program Files (x86)\MsBuild\12.0\Bin\msbuild.EXE
Ответ 4
У меня была такая же проблема с сборкой TFS.
Вы можете решить эту проблему, установив визуальную студийную версию в аргументах MSBuild построения определения:
/property:VisualStudioVersion=12.0;
![Аргументы MSBuild в определении сборки]()
Ответ 5
Это многоступенчатое решение.
Сначала убедитесь, что у вас установлены .Net SDK.
Затем убедитесь, что существует следующая запись реестра:
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\GenericBootstrapper\11.0
Он должен содержать запись "Путь" со значением, указывающим на местоположение загрузчика:
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\Bootstrapper\
Следующая команда powershell script делает это для вас:
$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\"
Ответ 6
МОЕ РЕШЕНИЕ К ПРОБЛЕМЕ: нельзя публиковать, поскольку setup.bin не может быть найден
При использовании мастера PUBLISH в vs2008 приложение не может быть опубликовано, потому что setup.bin не может быть найден.
Короткий ответ:
Вставьте папку engine
в местоположение, указанное в сообщении ERROR в 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
.
Эта копия папки разрешила проблему и позволила мне опубликовать приложение.
Вот конкретные шаги, которые я предпринял:
-
Поиск в реестре для setup.bin
-
Когда setup.bin находится в реестре, проверьте ключ и обратите внимание на расположение папки setup.bin(в моем случае это было C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Engine
)
-
В VS2008 IDE загляните в окно ERROR и обратите внимание на расположение папки для ошибки setup.bin(в моем случае это было C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\engine\
)
-
В IDE vs2008 ожидалось, что 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
и вставьте эту папку в папку IDE в C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\