Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Используйте условие Существует для задачи копирования.

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

<Copy SourceFiles="@(ItemsThatNeedToBeCopied)"
      DestinationFolder="$(OutputDir)"
      Condition="Exists('%(RootDir)%(Directory)%(Filename)%(Extension)')"/>

Ответ 2

Самый простой способ - использовать флаг 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, было бы лучше.

Ответ 3

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