2011-08-15 17 views
9

私は、TortoiseSVNが両方のバージョンを提供しているので、C:\Program Files\TortoiseSVN\binにある実行ファイルであるSubWCRev.exeを呼び出して、カスタムのMSBuildタスクを作成しました。

問題は、Visual Studio 2010には32ビットバージョンしかありません。だから、私の同僚が64ビットボックスを持っていると、光沢のある新しい仕事を使ってビルドしようとすると、は、C:\Program Files(x86)に解決され、SubWCRev.exeが見つかりません。彼らはC:\Program Filesに住んでいるTortoiseSVNの64ビットバージョンを持っているので!

msbuildスクリプトにC:\Program Filesをハードコードするよりも良い解決策がありますか、誰もがTortoiseSVNの32ビット版を使用することはありますか? (実際にはC#プロジェクトですが、私はMSBuildコードをちょっと試しました)

答えて

14

それこの:

<Project ToolsVersion="4.0" DefaultTargets="PrintValues" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <Target Name="PrintValues"> 
    <PropertyGroup> 
     <MyProgramFiles>$(ProgramW6432)</MyProgramFiles> 
     <MyProgramFiles Condition="$(MyProgramFiles) == ''">$(ProgramFiles)</MyProgramFiles> 
    </PropertyGroup> 

    <Message Text="MyProgramFiles: $(MyProgramFiles)"/> 
    </Target> 

</Project> 

これにより、MyProgramFilesは、32ビットと64ビットの両方のWindowsの "C:¥Program Files"に解決されます(Windowsの64ビット以外のバージョンでは、ProgramW6432環境変数は空です)。

+0

すぐに働きました!どうもありがとう –

1

パスをハードコーディングする代わりにMSBuildExtensionsPathプロパティを使用してください。 MSDNパー

\プログラムファイル\または\プログラムファイル (x86の)フォルダの下のMSBuildサブフォルダ。このパスは、現在実行中のウィンドウと同じ ビット数のプログラムファイルを指します。たとえば、64ビットマシン上の 32ビットウィンドウの場合、パスはProgram Files (x86)になります。フォルダ。 64ビットマシン上の64ビットウィンドウの場合、パスは Program Filesフォルダになります。 MSBuildExtensionsPath32および MSBuildExtensionsPath64も参照してください。

編集:

<PropertyGroup> 
    <TortoiseSVNPath>$(MSBuildExtensionsPath64)\..\TortoiseSVN\bin</TortoiseSVNPath> 
</PropertyGroup> 

もう一つの方法は、フォルダの存在を確認することです::は使用し、64ビットSVNフォルダを取得するには見てみましょう

<PropertyGroup> 
    <TortoiseSVNPath Condition="Exists('$(PROGRAMFILES) (x86)')">$(PROGRAMFILES) (x86)\TortoiseSVN\bin</TortoiseSVNPath> 
    <TortoiseSVNPath Condition="$(TortoiseSVNPath) == ''">$(PROGRAMFILES)\TortoiseSVN\bin</TortoiseSVNPath> 
</PropertyGroup> 
+0

申し訳ありませんが、私はそれを試して、C:\ Program Files(x86)\ MSBuildに解決しました。私はそれがWindows 7の64ビットボックスであり、Visual Studioは32ビットプロセス(プロセスエクスプローラでチェックされている)であることは肯定的です。 –

+0

これは正しい動作です。 32ビットVSの場合、 'C:\ Program Files(x86)... 'に解決されるはずです。 MSBuildが最後に問題になっていますか? '$(MSBuildExtensionsPath)\ ..'は正しい 'Program Files'フォルダを与えます。 – Mrchief

+0

@dario_ramos:例については、私の更新答えを見てください。 – Mrchief

関連する問題