In MSBuild 4.0 Der einfachste Weg ist der folgende:
$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)\your\path'))
Diese Methode funktioniert auch, wenn das Skript <Import>
in ein anderes Skript eingefügt werden; der Pfad ist relativ zu der Datei, die den obigen Code enthält.
(konsolidiert von Aaron's Antwort sowie den letzten Teil von Sayed's Antwort )
In MSBuild 3.5 können Sie die ConvertToAbsolutePath Aufgabe:
<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>
Relevanter 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\".
Ein bisschen langatmig, wenn Sie mich fragen, aber es funktioniert. Sie ist relativ zur "Original"-Projektdatei, d.h. wenn sie innerhalb einer Datei platziert wird, die <Import>
ist dies nicht relativ zu dieser Datei.
In MSBuild 2.0 gibt es einen Ansatz, der ".." nicht auflöst. Er verhält sich jedoch genau wie ein absoluter Pfad:
<PropertyGroup>
<Source_Dir_Abs>$(MSBuildProjectDirectory)\$(Source_Dir)</Source_Dir_Abs>
</PropertyGroup>
El $(MSBuildProjectDirectory) reservierte Eigenschaft ist immer das Verzeichnis des Skripts, das diesen Verweis enthält.
Diese wird auch relativ zur "Original"-Projektdatei sein, wenn sie also innerhalb einer Datei platziert wird, die <Import>
ist dies nicht relativ zu dieser Datei.
0 Stimmen
Ich denke, dass FullPath-Metadaten nur für <ItemGroup>-Elemente gelten, nicht für <PropertyGroup>-Eigenschaften.
0 Stimmen
Ich denke, Sie haben Recht. Kennt jemand einen Weg, um von der Eigenschaft zu einem vollständigen/absoluten Pfad zu gelangen?
1 Stimmen
Sie könnten "irgendwie" dorthin gelangen, indem Sie $(ProjectDir)$(Source_Dir) verwenden, aber Sie würden überflüssige '..'s haben