Не удалось найти файл '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>

Ответ 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\