次のように、powershell から MSBuild を使用して、Web アプリケーション プロジェクトを含むソリューションを構築します。
msbuild "/p:OutDir=$build_dir\" $solution_file
32 ビットでは問題なく動作しますが、64 ビット マシンでは次のエラーが発生します。
エラー MSB4019: インポートされたプロジェクト "C:\Program Files\MSBuild\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" が見つかりませんでした。宣言内のパスが正しいこと、およびファイルがディスク上に存在することを確認してください。
Visual Studio 2008 と powershell v2 を使用しています。この問題はすでにこことここに文書化されています。基本的に、VS の 64 ビット インストールでは、MSBuild に必要な Microsoft.WebApplication.targets は、Program Files ディレクトリではなく、Program Files(x86) ディレクトリにありますが、MSBuild はこれを認識しないため、間違った場所に表示されます。
これまでに私が持っている2つのソリューションは理想的ではありません:
- 64 ビットのファイルを Program Files (x86) から Program Files に手動でコピーします。これは貧弱な解決策です。すべての開発者がこれを手動で行う必要があります。
- csproj ファイルを手動で編集して、MSBuild が適切な場所に表示されるようにします。繰り返しますが、理想的ではありません。新しいプロジェクトごとに 64 ビットの全員が csproj ファイルを手動で編集する必要はありません。
例えば
<Import Project="$(MSBuildExtensionsPathx86)\$(WebAppTargetsSuffix)" Condition="Exists('$(MSBuildExtensionsPathx86)\$(WebAppTargetsSuffix)')" />
理想的には、コマンド ラインから適切な場所からターゲット ファイルをインポートするように MSBuild に指示する方法が必要ですが、その方法がわかりません。解決策はありますか?