UFO ET IT

MSBuild 스크립트에서 현재 디렉터리를 얻으려면 어떻게해야합니까?

ufoet 2020. 11. 16. 23:18
반응형

MSBuild 스크립트에서 현재 디렉터리를 얻으려면 어떻게해야합니까?


내 MSBuild 스크립트에서 전체 디렉터리를 매개 변수로 전달해야합니다. 어떻게받을 수 있습니까?

예 : C : \ dev에서 스크립트를 실행 중이고 상대 경로 temp를 원하므로 C : \ dev \ temp 다음에 있습니다.

참고 : 스크립트가 어느 폴더에서 실행 될지 모르겠습니다.


이고르는 꽤 가깝습니다. MSBuildProjectDirectory명령 줄에서 호출 된 프로젝트 파일의 전체 경로를 제공하는 속성입니다. 따라서 다음 스크립트가있는 경우 :

  • C : \ temp \ MyProj.proj
  • C : \ shared \ shared.targets

그리고 MyProj.projimports shared.targets와 이것은 msbuild.exe에 전달 된 MSBuildProjectDirectory입니다. 그러면 shared.targets 내부에서 참조하는 경우에도 은 항상 C : \ temp 가됩니다. shared.targets에 경로 정보가 필요한 경우 알려진 속성에서 선언해야합니다. 예를 들어 C # 프로젝트 파일은 값을 정의 OutputPath하고 공유 파일 Microsoft.Common.targets은 해당 속성을 사용합니다.

편집 : MSBuild 4

MSBuild 4를 사용하는 경우 이제이 유형의 값에 대한 속성을 사용할 수 있습니다.

  • MSBuildThisFile
  • MSBuildThisFileDirectory
  • MSBuildThisFileDirectoryNoRoot
  • MSBuildThisFileExtension
  • MSBuildThisFileFullPath
  • MSBuildThisFileName

http://sedodream.com/2010/03/11/MSBuild40ReservedProperties.aspx를 참조 하십시오 .


다음은 도움이되는 3 가지 목표입니다.

WhereAmI는 물론 현재 디렉토리를 파악하려고 할 때 사용하는 것입니다. 다른 것 역시 유익합니다. (일부는 질문의 범위를 벗어납니다).

<Target Name="WhereAmI">
    <Message Text=" Here I Am  " />
    <Exec Command="dir ." />
    <Message Text=" " />
</Target>



<Target Name="ShowReservedProperties" AfterTargets="BeforeBuild">  
    <Message Text=" MSBuildProjectDirectory  = $(MSBuildProjectDirectory)" Importance="high" />     
    <Message Text=" MSBuildProjectFile  = $(MSBuildProjectFile)" Importance="high" />   
    <Message Text=" MSBuildProjectExtension  = $(MSBuildProjectExtension)" Importance="high" />     
    <Message Text=" MSBuildProjectFullPath  = $(MSBuildProjectFullPath)" Importance="high" />   
    <Message Text=" MSBuildProjectName  = $(MSBuildProjectName)" Importance="high" />   
    <Message Text=" MSBuildBinPath  = $(MSBuildBinPath)" Importance="high" />   
    <Message Text=" MSBuildProjectDefaultTargets  = $(MSBuildProjectDefaultTargets)" Importance="high" />   
    <Message Text=" MSBuildExtensionsPath  = $(MSBuildExtensionsPath)" Importance="high" />     
    <Message Text=" MSBuildStartupDirectory  = $(MSBuildStartupDirectory)" Importance="high"/>
</Target>


  <Target Name="ShowOtherProperties">  
    <Message Text="  " />
    <Message Text="  " />
    <Message Text=" Environment (SET) Variables*       " />
    <Message Text=" ---------------------------        " />
    <Message Text=" COMPUTERNAME = *$(COMPUTERNAME)*   " />
    <Message Text=" USERDNSDOMAIN = *$(USERDNSDOMAIN)* " />
    <Message Text=" USERDOMAIN = *$(USERDOMAIN)*       " />
    <Message Text=" USERNAME = *$(USERNAME)*           " />
</Target>

"외부 msbuild 파일"을 사용 중이고 파일 이름이나 경로를 전달해야하는 경우 (외부 msbuild 파일은 호출하는 .msbuild 파일과 동일한 디렉토리에 있지 않은 경우 상대 파일을 좋아하지 않기 때문입니다) .... 여기에 편리한 작업 (3.5 이상)이 있습니다.

    <ConvertToAbsolutePath Paths="..\"> <!-- Some relative path here -->
      <Output TaskParameter="AbsolutePaths" PropertyName="MyAbsolutionPathProperty"/>
    </ConvertToAbsolutePath>            
    <Message Text="'MyAbsolutionPathProperty' = '$(MyAbsolutionPathProperty)'" />   

MSBuild에는 MSBuildProjectDirectory프로젝트 또는 스크립트 파일이있는 디렉터리의 절대 경로 인 이라는 속성이 예약되어 있습니다 ( 사용자의 경우 C : \ Dev). 따라서 "$(MSBuildProjectDirectory)\temp"정확히 당신이 찾고있는 것입니다.

참고 URL : https://stackoverflow.com/questions/2111256/how-can-i-get-the-current-directory-in-an-msbuild-script

반응형