Как выбрать все файлы только для чтения с помощью msbuild? - PullRequest
5 голосов
/ 12 марта 2010

Я пытаюсь написать скрипт MsBuild для архивирования некоторых файлов. Мне нужно рекурсивно выбрать все файлы только для чтения из папки в ItemGroup, чтобы добавить в zip.

Я использую задачу сообщества Zip, но пытаюсь выбрать файлы на основе их атрибутов.

Есть ли что-нибудь вокруг, чтобы сделать это из коробки, или мне нужно написать собственное задание?

Спасибо за помощь.

Ответы [ 3 ]

4 голосов
/ 03 июня 2011

Вы можете использовать Функции свойств (добавлено в 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>
0 голосов
/ 12 марта 2010

Это похоже на работу с использованием грязной командной строки.

<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"/>
0 голосов
/ 12 марта 2010

Вы смотрели на задачи по созданию сообщества сайт ?

У него есть задача zip и задача изменения атрибута - они должны получить большую часть пути туда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...