MSBuild - comment copier des fichiers qui peuvent ou non exister?

J'ai une situation où j'ai besoin de copier quelques fichiers spécifiques dans un script MSBuild, mais ils peuvent ou non exister. S'ils n'existent pas, c'est bon, je n'en ai pas besoin. Mais la tâche standard <copy> génère une erreur si elle ne peut pas trouver chaque élément de la liste...

24
demandé sur Vilx- 2009-02-04 18:27:05

3 réponses

Utilisez la conditionExists sur la tâche de copie.

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

<Copy SourceFiles="@(ItemsThatNeedToBeCopied)"
      DestinationFolder="$(OutputDir)"
      Condition="Exists('%(RootDir)%(Directory)%(Filename)%(Extension)')"/>
41
répondu Julien Hoarau 2009-02-04 15:38:50

Le plus simple serait d'utiliser L'indicateur 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>

Mais si quelque chose d'autre ne va pas, vous ne le remarquerez pas. Donc, la condition existe de la réponse de madgnome serait meilleure.

6
répondu KeesDijk 2009-02-04 15:50:29

Il semble que vous pouvez marquer MySourceFiles comme SkipUnchangedFiles= "true" et il ne copiera pas les fichiers s'ils existent déjà.

0
répondu kevindaub 2009-08-25 16:53:42