En MSBuild 4.0, la forma más fácil es la siguiente :
$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)\your\path'))
Este método funciona incluso si el guión es <Import>
ed en otra secuencia de comandos; la ruta es relativa al archivo que contiene el código anterior.
(consolidado desde Aaron's answer, así como la última parte de Sayed's answer)
En MSBuild 3.5, se puede utilizar el ConvertToAbsolutePath tarea:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
DefaultTargets="Test"
ToolsVersion="3.5">
<PropertyGroup>
<Source_Dir>..\..\..\Public\Server\</Source_Dir>
<Program_Dir>c:\Program Files (x86)\Program\</Program_Dir>
</PropertyGroup>
<Target Name="Test">
<ConvertToAbsolutePath Paths="$(Source_Dir)">
<Output TaskParameter="AbsolutePaths" PropertyName="Source_Dir_Abs"/>
</ConvertToAbsolutePath>
<Message Text='Copying "$(Source_Dir_Abs)" to "$(Program_Dir)".' />
</Target>
</Project>
salida relevante:
Project "P:\software\perforce1\main\XxxxxxXxxx\Xxxxx.proj" on node 0 (default targets).
Copying "P:\software\Public\Server\" to "c:\Program Files (x86)\Program\".
Un poco largo si me preguntas, pero funciona. Esto será relativo al archivo de proyecto "original", por lo que si se coloca dentro de un archivo que obtiene <Import>
ed, esto no será relativo a ese archivo.
En MSBuild 2.0, no es un enfoque que no se resuelve "..". Sin embargo, sí se comportan como una ruta absoluta:
<PropertyGroup>
<Source_Dir_Abs>$(MSBuildProjectDirectory)\$(Source_Dir)</Source_Dir_Abs>
</PropertyGroup>
El $(MSBuildProjectDirectory) propiedad reservada es siempre el directorio del script que contiene esta referencia.
Esto también será relativo al archivo de proyecto "original", por lo que si se coloca dentro de un archivo que obtiene <Import>
ed, esto no será relativo a ese archivo.
Creo que los metadatos de FullPath solo se aplican a los elementos, no a las propiedades de . –
lesscode
Creo que tienes razón, ¿alguien sabe cómo llegar desde la propiedad a una ruta completa/absoluta? –
Podrías "llegar" usando $ (ProjectDir) $ (Source_Dir), pero tendrías superfluo '..' s – lesscode