MSBuild: копирование нескольких файлов в несколько мест - PullRequest
0 голосов
/ 12 декабря 2018

Я хотел бы скопировать различные файлы из моего проекта в выходную папку.Однако нет правила, какие файлы следует копировать, а какие нет, поэтому я не могу надежно использовать подстановочный символ **.

Я придумал что-то вроде этого:

  <Target Name="CopyMyFiles">
    <ItemGroup>
      <FilesToCopyToOutput Include=".\folder1\*.dat" />
      <FilesToCopyToOutput Include=".\folder2\*" />
      <FilesToCopyToOutput Include=".\folder3\*.txt" />
    </ItemGroup>
    <Message Text="Copying files..."/>

    <Copy SourceFiles="@(FilesToCopyToOutput)" 
          DestinationFolder="%(OutputFolder)\files"/>
  </Target>

но дело в том, что это не сохраняет структуру папок, поэтому «folder1», «folder2», ... теряются, и все файлы оказываются в одном каталоге.Я заметил, что не могу использовать %(FilesToCopyToOutput.RecursiveDir) без использования подстановочного знака.

Я бы хотел, чтобы этот процесс копирования был настолько автоматизирован, насколько это возможно, так как список файлов, которые нужно скопировать, меняется довольно часто, и я бы предпочел избегать ситуации, когда мне нужно добавить отдельную задачу для каждогопапка.

РЕДАКТИРОВАТЬ: На данный момент я пришел к следующему

  <Target Name="CopyMyFiles">
    <ItemGroup>
      <FilesToCopyToOutput Include=".\folder1\*.dat" />
      <FilesToCopyToOutput Include=".\folder2\*" />
      <FilesToCopyToOutput Include=".\folder3\*.txt" />
    </ItemGroup>
    <Message Text="Copying files..."/>

    <Copy SourceFiles="@(FilesToCopyToOutput)" 
          DestinationFolder="%(OutputFolder)\files\%(FilesToCopyToOutput.RelativeDir)"/>
  </Target>

Согласно документу, атрибут "RelativeDir" содержит путь, указанный до последнего "\",Это нормально для меня, однако может быть немного сложнее, если путь определяется с помощью параметра "% (ProjectDir)".

Пока я собираюсь использовать этот, но я рад слышать, если естьлюбой лучший способ решения этой проблемы.

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