MSBuild - как копировать файлы, которые могут существовать или не существовать? - PullRequest
26 голосов
/ 04 февраля 2009

У меня есть ситуация, когда мне нужно скопировать несколько конкретных файлов в сценарии MSBuild, но они могут существовать или не существовать. Если их не существует, это нормально, тогда они мне не нужны. Но стандартная задача <copy> выдает ошибку, если не может найти каждый элемент в списке ...

Ответы [ 3 ]

43 голосов
/ 04 февраля 2009

Использование условия Exists в задаче копирования.

<CreateItem Include="*.xml">
  <Output ItemName="ItemsThatNeedToBeCopied" TaskParameter="Include"/>
</CreateItem>

<Copy SourceFiles="@(ItemsThatNeedToBeCopied)"
      DestinationFolder="$(OutputDir)"
      Condition="Exists('%(RootDir)%(Directory)%(Filename)%(Extension)')"/>
7 голосов
/ 04 февраля 2009

Проще всего было бы использовать флаг ContinueOnError http://msdn.microsoft.com/en-us/library/7z253716.aspx

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <MySourceFiles Include="a.cs;b.cs;c.cs"/>
    </ItemGroup>

    <Target Name="CopyFiles">
        <Copy
            SourceFiles="@(MySourceFiles)"
            DestinationFolder="c:\MyProject\Destination"
            ContinueOnError="true"
        />
    </Target>

</Project>

Но если что-то не так, вы не заметите этого. Таким образом, условие существует из ответа Madgnome будет лучше.

0 голосов
/ 25 августа 2009

Похоже, вы можете пометить MySourceFiles как SkipUnchangedFiles = "true", и он не будет копировать файлы, если они уже существуют.

...