2012-05-30 62 views
0

作爲構建腳本的一部分,我們從子目錄複製用戶消息文件,並希望將子目錄的名稱附加到消息文件中。 即MSG \ 0 \ message.std> MSG \ message0.std使用%(RecursiveDir)作爲文件名的一部分的MSBuild

我已經使用

<Copy SourceFiles="@(MessageFiles)" 
DestinationFiles="@(MessageFiles->'$(BuildRoot)\%(Filename)%(RecursiveDir)%(Extension)'"/> 

然而,這試圖將文件複製到.. \ message0.std試過。

無論如何抑制%(RecursiveDir)的尾部'\'或另一種方式構成目的地名稱?

回答

2

你可以做類似如下:

<Target Name="DoIt"> 
    <ItemGroup> 
     <MessageFiles2 Include="@(MessageFiles)"> 
      <SubDir>$([System.IO.Path]::GetFileName($([System.IO.Path]::GetDirectoryName(%(MessageFiles.RecursiveDir)))))</SubDir> 
     </MessageFiles2> 
    </ItemGroup> 

    <Message Text="@(MessageFiles2->'$(BuildRoot)\%(Filename)%(SubDir)%(Extension)')"/> 

</Target> 

,或者如果你想炸掉心中誰就會盡量保持你的工作的人:

<Target Name="DoIt"> 
    <Message Text="@(MessageFiles->'$(BuildRoot)\%(Filename)$([System.IO.Path]::GetFileName($([System.IO.Path]::GetDirectoryName($([System.String]::Copy('%(MessageFiles.RecursiveDir)'))))))%(Extension)')"/> 
</Target> 

這不是一個完整的解決方案,但你可以從這裏開始。另請注意,如果RecursiveDir爲空,則上述兩個示例都會中斷,即您的消息文件直接位於根文件夾中。
您可以在MSBuild Property Functions博客文章中找到更多信息。

作爲處理您的問題的另一種方式,您始終可以創建Custom Task

相關問題