36


8

64ビット版のWindowsでは、32ビットソフトウェアが "c:\ program files(x86)"にインストールされています。 つまり、(32ビット)ソフトウェアへのパスを取得するために$(programfiles)を使用することはできません。 だから私は私のMSBuildプロジェクトでこれを克服するために$(ProgramFiles32)が必要です。 実行しているOSに応じてプロジェクトを変更したくありません。

私が投稿する解決策はありますが、もっと簡単な方法があるかもしれません。

7 Answer


41


MSBuild 4.0にはhttp://msdn.microsoft.com/en-us/library/ms164309.aspx[a $(MSBuildProgramFiles32)property]があります。これは自信を持って直接使用できます(特に準備ができている場合)。それが利用可能になることを保証するためにファイルの先頭に `ToolsVersion =" 4.0 "`を置くこと、そしてそうでない場合はhttp://en.wikipedia.org/wiki/Fail-fast[Fail Fast]。

MSBuild 2.0以降の環境で(つまりVS 2005環境に戻っても)実行した場合でも適切なことができない場合は、次のようにします。

    $(MSBuildProgramFiles32)

    $(ProgramFiles%28x86%29)


    $(ProgramFiles) (x86)


    $(ProgramFiles)

残念ながらhttp://en.wikipedia.org/wiki/Progressive_enhancement [プログレッシブ拡張] / polyfill http:/を上書きして/ msdn.microsoft.com/ja-jp/library/ms164309.aspx [MSBuild予約プロパティ] MSBuildProgramFiles32を介したMSBuildProgramFiles32の指定は、MSBuild 4.0では拒否されているため、きれいにすることはできません。 .NET 2.0.


16


私の解決策は、 "c:\ program files(x86)"が存在するかどうかを調べることです。これが64ビットOSであると仮定します。 それ以外の場合は、通常のプログラムファイルディレクトリを使用します。

$(PROGRAMFILES)(x86)$(PROGRAMFILES)

こんな感じで使えます



11


MSBuild 4.0では、 `$(MSBuildProgramFiles32)`は32ビットのProgram Filesディレクトリになります。


8


$(MSBuildExtensionsPath32)を試してください。


4


もう少し信頼できる方法は、環境変数 "ProgramFiles(x86)"を取得することだと思います。 Windows上の64ビットプロセスでは、これは32ビットプログラムファイルディレクトリを指します。 32ビット版のWindowsでは空になり、wow64プロセスでは*信じられる*

私は最近、いくつかのPowerShellスクリプトでほぼ同じ問題に遭遇しました。 私はプログラムファイルのディレクトリの問題を回避する方法についてのブログエントリを書きました。 明らかに異なる言語が、それはあなたを助けるかもしれません。


1


私はそれが32ビットか64ビットOSかを確かめるためにMSbuildで一般的な方法を見つけようとしているこの質問に出会いました。 他の誰かがこれを見つけた場合には、私は以下を使いました:

  x64
  x32

どうやら `%ProgramW6432%`は64ビットシステムでのみ設定されています。


1


32ビットバージョンのVisual Studioツールを実行する場合(特にVS2012では、3つの異なるコマンドプロンプトから選択できます)、$(ProgramFiles)は "Program Files(x86)"を指します。