我正在尝试编写一个MsBuild脚本来压缩一些文件。我需要从文件夹中递归选择所有只读文件到ItemGroup以添加到zip。
我正在使用社区任务Zip任务,但我正在努力根据属性选择文件。
开箱即用,或者我是否需要编写自定义任务?
谢谢你的帮助。
答案 0 :(得分:4)
您可以使用Property Functions(添加到msbuild 4)来确定文件是否为只读文件:
<ItemGroup>
<MyFiles Include="Testing\*.*" >
<ReadOnly Condition='1 == $([MSBuild]::BitwiseAnd(1, $([System.IO.File]::GetAttributes("%(Identity)"))))'>True</ReadOnly>
</MyFiles>
</ItemGroup>
<Target Name="Run" Outputs="%(MyFiles.Identity)">
<Message Text="%(MyFiles.Identity)" Condition="%(MyFiles.ReadOnly) != True"/>
<Message Text="%(MyFiles.Identity) ReadOnly" Condition="%(MyFiles.ReadOnly) == True" />
</Target>
答案 1 :(得分:0)
您是否查看了社区构建任务site?
它有一个zip任务和一个属性更改任务 - 它们应该可以帮助你完成任务。
答案 2 :(得分:0)
这似乎可以通过一些脏的命令行使用来完成这项工作。
<Exec Command="dir .\RelPath\ToFolder\ToSearchIn /S /AR /B > readonlyfiles.temp.txt"/>
<ReadLinesFromFile File="readonlyfiles.temp.txt">
<Output TaskParameter="Lines" ItemName="ReadOnlyFiles"/>
</ReadLinesFromFile>
<Delete Files="readonlyfiles.temp.txt"/>
它提供了文件的绝对路径。
要获得相对路径,请尝试以下方法:
<Exec Command="dir .\RelPath\ToFolder\ToSearchIn /S /AR /B > readonlyfiles.temp.txt"/>
<FileUpdate Files="readonlyfiles.temp.txt"
Multiline="True"
Regex="^.*\\RelPath\\ToFolder\\ToSearchIn"
ReplacementText="RelPath\ToFolder\ToSearchIn"
/>
<ReadLinesFromFile File="readonlyfiles.temp.txt">
<Output TaskParameter="Lines" ItemName="ReadOnlyZipFiles"/>
</ReadLinesFromFile>
<Delete Files="readonlyfiles.temp.txt"/>