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。お気に入りの分解ツールを使用すると、パスの取得が最終的に3回試行されることがわかります。

  1. HKLM \ Software \ Microsoft \ GenericBootstrapper \ 11.0 \ Path
  2. HKLM \ Software \ Wow6432Node \ Microsoft \ GenericBootstrapper \ 11.0 \ Path
  3. Environment.CurrentDirectory

VS 2012がこのマシンにインストールされたことがないことを覚えている限り、なぜ11.0と表示されるのかわかりません。

そのため、SDKインストーラーにバグがあるか、DLLにバグがあります。いずれにせよ、11.0レジストリキーを作成して値を追加すると、この問題は解決します。注:パスを取得しようとするとキャッシュされるため、VisualStudioを再起動する必要があります。

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引数でVisualStudioのバージョンを設定することで、問題を解決できます。

/property:VisualStudioVersion=12.0;

ビルド定義のMSBuild引数

于 2016-08-18T10:01:43.193 に答える
2

これはマルチステップソリューションです。

まず、.NetSDKがインストールされていることを確認します。

次に、次のレジストリエントリが存在することを確認します。 HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\GenericBootstrapper\11.0

ブートストラッパーの場所を指す値を持つ「Path」エントリが含まれている必要があります。 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 "
    }
}

最後に、VisualStudioツールの一部として含まれている「Engine」フォルダーの内容をレジストリ値にリストされている場所にコピーする必要があります。

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

問題の解決策:setup.binが見つからないため、公開できません

vs2008でPUBLISHウィザードを使用する場合、setup.binが見つからないため、アプリケーションを公開できません。


簡単な答えは次のとおりです。

enginevs2008IDEのエラーメッセージに示されている場所にフォルダを貼り付けます。

engineフォルダはフォルダ内にありMicrosoft SDKsます。


長い答えは次のとおりです。

私の場合、vs2008はでsetup.binを探していましたC:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\engine\

この場所は、vs2008IDE内のエラーで示されました。

上記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で、[エラー]ウィンドウを確認し、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

私はしばらくの間この問題に苦しんでいます。

解決策は非常に簡単です。VisualStudioまたはVisualStudioビルドツールに「clickonceビルドツール」をインストールする必要があります。これは小さなコンポーネントであり、通常は自動選択されません。

于 2022-01-20T02:53:59.507 に答える