kri*_*isn 1 msbuild msbuild-4.0
作为构建脚本的一部分,我们从子目录复制用户消息文件,并希望将子目录的名称附加到消息文件中。即msg \ 0 \ message.std> msg \ message0.std
我尝试使用
<Copy SourceFiles="@(MessageFiles)"
DestinationFiles="@(MessageFiles->'$(BuildRoot)\%(Filename)%(RecursiveDir)%(Extension)'"/>
Run Code Online (Sandbox Code Playgroud)
但是,这试图将文件复制到.. \ message0.std。
无论如何,还是要抑制%(RecursiveDir)中的尾随'\'或以另一种方式组成目标名称?
您可以执行以下操作:
<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>
Run Code Online (Sandbox Code Playgroud)
或者,如果您想炸开要努力维持工作的人的想法,请执行以下操作:
<Target Name="DoIt">
<Message Text="@(MessageFiles->'$(BuildRoot)\%(Filename)$([System.IO.Path]::GetFileName($([System.IO.Path]::GetDirectoryName($([System.String]::Copy('%(MessageFiles.RecursiveDir)'))))))%(Extension)')"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
这不是一个完整的解决方案,但是您可以从这里开始。还要注意,如果RecursiveDir为空,则以上两个示例都将中断,即您的消息文件直接位于根文件夹中。
您可以在MSBuild属性函数博客文章中找到更多信息。
作为解决问题的另一种方法,您始终可以创建“ 自定义任务”。
| 归档时间: |
|
| 查看次数: |
6643 次 |
| 最近记录: |