How can I get MSBUILD to evaluate and print the full path when given a relative path?

前端 未结 5 842
情话喂你
情话喂你 2020-12-13 17:05

How can I get MSBuild to evaluate and print in a task an absolute path given a relative path?

Property Group

5条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-13 17:54

    In MSBuild 4.0, the easiest way is the following:

    $([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)\your\path'))
    

    This method works even if the script is ed into another script; the path is relative to the file containing the above code.

    (consolidated from Aaron's answer as well as the last part of Sayed's answer)


    In MSBuild 3.5, you can use the ConvertToAbsolutePath task:

    
      
        ..\..\..\Public\Server\
        c:\Program Files (x86)\Program\
      
    
      
        
          
        
        
      
    
    

    Relevant output:

    Project "P:\software\perforce1\main\XxxxxxXxxx\Xxxxx.proj" on node 0 (default targets).
      Copying "P:\software\Public\Server\" to "c:\Program Files (x86)\Program\".
    

    A little long-winded if you ask me, but it works. This will be relative to the "original" project file, so if placed inside a file that gets ed, this won't be relative to that file.


    In MSBuild 2.0, there is an approach which doesn't resolve "..". It does however behave just like an absolute path:

    
        $(MSBuildProjectDirectory)\$(Source_Dir)
    
    

    The $(MSBuildProjectDirectory) reserved property is always the directory of the script that contains this reference.

    This will also be relative to the "original" project file, so if placed inside a file that gets ed, this won't be relative to that file.

提交回复
热议问题