2011-08-15 6 views
9

TortoiseSVN이 두 버전을 모두 제공하므로 C:\Program Files\TortoiseSVN\bin에있는 실행 파일 인 SubWCRev.exe을 32 비트 또는 64 비트로 호출하는 사용자 지정 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 (""환경 변수는 64 비트가 아닌 Windows 버전에서는 비어 있음)에서 "C : \ Program Files"로 변환됩니다.

+0

일했습니다. 고마워. –

1

경로를 하드 코딩하는 대신 MSBuildExtensionsPath 속성을 사용하십시오. MSDN

:

은 \ Program Files \ 또는 \ 프로그램 파일 (86) 폴더 아래의 MSBuild를 하위 폴더. 이 경로는 항상 현재 실행중인 창과 동일한 비트의 프로그램 파일을 가리 킵니다. 예를 들어, 64 비트 시스템의 32 비트 창에 대한 경로는 프로그램 파일 (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 파일 (x86) \ MSBuild 해결할. 저는 이것이 Windows 7 64 비트 박스이고 Visual Studio는 32 비트 프로세스 (Process Explorer를 사용하여 확인한 것)입니다. –

+0

그게 올바른 행동입니다. 32 비트 VS의 경우, C : \ Program Files (x86) ...로 변환되어야합니다. 결국 MSBuild가 문제입니까? '$ (MSBuildExtensionsPath) \ ..'는 올바른'Program Files' 폴더를 줄 것입니다. – Mrchief

+0

@dario_ramos : 예를 들어 업데이트 된 답변을 참조하십시오. – Mrchief