MSBuild 4.0 में, सबसे आसान तरीका है :
$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)\your\path'))
इस विधि से काम करता है, भले ही स्क्रिप्ट <Import>
एड में है एक और लिपि; पथ उपर्युक्त कोड वाली फ़ाइल से संबंधित है।
<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>
प्रासंगिक उत्पादन:
(Aaron's answer के साथ-साथ Sayed's answer के अंतिम भाग से समेकित) MSBuild 3.5 में, आप ConvertToAbsolutePath कार्य का उपयोग कर सकते
Project "P:\software\perforce1\main\XxxxxxXxxx\Xxxxx.proj" on node 0 (default targets).
Copying "P:\software\Public\Server\" to "c:\Program Files (x86)\Program\".
यदि आप मुझसे पूछें तो थोड़ा लंबा हवादार, लेकिन यह काम करता है। यह "मूल" प्रोजेक्ट फ़ाइल के सापेक्ष होगा, इसलिए यदि <Import>
एड प्राप्त होने वाली फ़ाइल के अंदर रखा गया है, तो यह उस फ़ाइल के सापेक्ष नहीं होगा।
MSBuild 2.0 में, एक दृष्टिकोण है जो हल नहीं होती है ".."। लेकिन यह सिर्फ एक निरपेक्ष पथ की तरह व्यवहार करता है:
<PropertyGroup>
<Source_Dir_Abs>$(MSBuildProjectDirectory)\$(Source_Dir)</Source_Dir_Abs>
</PropertyGroup>
$(MSBuildProjectDirectory) सुरक्षित संपत्ति हमेशा स्क्रिप्ट है कि इस संदर्भ है की निर्देशिका है।
यह "मूल" प्रोजेक्ट फ़ाइल के सापेक्ष भी होगा, इसलिए यदि <Import>
एड प्राप्त होने वाली फ़ाइल के अंदर रखा गया है, तो यह उस फ़ाइल के सापेक्ष नहीं होगा।
स्रोत
2009-08-09 11:22:53
मुझे लगता है कि फुलपाथ मेटाडाटा केवल आइटम पर लागू होता है, न कि गुण। –
lesscode
मुझे लगता है कि आप सही हैं, किसी को संपत्ति से पूर्ण/पूर्ण पथ तक पहुंचने का कोई तरीका पता है? –
आप $ (ProjectDir) $ (Source_Dir), का उपयोग करके "थोड़े" वहां जा सकते हैं, लेकिन आपके पास अनावश्यक '..' – lesscode