MSBuild使用%(RecursiveDir)作为文件名的一部分
作为构建脚本的一部分,我们从子目录复制用户消息文件,并希望将子目录的名称附加到消息文件中。 i、 e.msg\0\message.std>msg\message0.std 我试过使用MSBuild使用%(RecursiveDir)作为文件名的一部分,msbuild,msbuild-4.0,Msbuild,Msbuild 4.0,作为构建脚本的一部分,我们从子目录复制用户消息文件,并希望将子目录的名称附加到消息文件中。 i、 e.msg\0\message.std>msg\message0.std 我试过使用 <Copy SourceFiles="@(MessageFiles)" DestinationFiles="@(MessageFiles->'$(BuildRoot)\%(Filename)%(RecursiveDir)%(Extension)'"/> 但是,这会尝试将文件复制到..\me
<Copy SourceFiles="@(MessageFiles)"
DestinationFiles="@(MessageFiles->'$(BuildRoot)\%(Filename)%(RecursiveDir)%(Extension)'"/>
但是,这会尝试将文件复制到..\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>
$([System.IO.Path]::GetFileName($([System.IO.Path]::GetDirectoryName(%(MessageFiles.RecursiveDir俬俬俬)
或者,如果你想让试图维持你工作的人头脑发热:
<Target Name="DoIt">
<Message Text="@(MessageFiles->'$(BuildRoot)\%(Filename)$([System.IO.Path]::GetFileName($([System.IO.Path]::GetDirectoryName($([System.String]::Copy('%(MessageFiles.RecursiveDir)'))))))%(Extension)')"/>
</Target>
这不是一个完整的解决方案,但您可以从这里开始。另外请注意,如果RecursiveDir
为空,即您的邮件文件直接位于根文件夹中,则上述两个示例都将中断。你可以在博客文章中找到更多信息 作为处理问题的另一种方法,您可以随时创建。“如果您希望让试图维护您工作的人头脑发热”:-D