68 votes

MSbuild Copier tout le dossier

essayer de copier un dossier entier, mais quand je fais ceci:

 <Copy SourceFiles="$(TargetDir)\*.*" DestinationFolder="$(BuildOutput)\SomeDir" />

la copie tente de le faire : copiez c:\source\*.* c:\destination\SomeDir\*.* et échoue avec des "caractères illégaux"

91voto

Brian Kretzler Points 6012

Spécifiez explicitement votre ItemGroup pour SourceFiles.

 <ItemGroup>
    <_CopyItems Include="$(TargetDir)\*.*" />
</ItemGroup>
<Copy
    SourceFiles="@(_CopyItems)"
    DestinationFolder="$(BuildOutput)\SomeDir"
    />

Notez que _CopyItems est un type d'élément, il est donc référencé en utilisant le symbole '@' plutôt que '$'.

43voto

Terence Points 51

Si vous placez le dossier à la racine de votre projet c#, vous pouvez simplement le mettre dans votre csproj.

 <ItemGroup>
    <None Update="FolderToCopy\**\*.*">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
</ItemGroup>

Je n'ai testé que dans la version 2017 de csproj, mais je suppose qu'elle est rétrocompatible. Peut-être que tu te trompes là-dessus

14voto

RichTea Points 288

En regardant la documentation MSDN, je pense que le paramètre SourceFiles nécessite une valeur ITaskItem[]. Voir Tâche de copie MSDN MSBuild

Le dernier exemple sur le lien ci-dessus consiste à effectuer une copie récursive d'un répertoire à un autre, en conservant la structure des dossiers.

9voto

Arthur Points 1064

A réussi à accomplir cette tâche comme celle-ci

 <Target Name="AfterBuild">
  <ItemGroup>
    <SomeDir Include="$(SolutionDir)\SomeOtherProject\SomeDir\**\*" />
  </ItemGroup>
  <Copy 
    SourceFiles="@(SomeDir)" 
    DestinationFiles="@(SomeDir->'$(OutDir)\SomeDir\%(RecursiveDir)%(Filename)%(Extension)')" 
    SkipUnchangedFiles="true" 
    OverwriteReadOnlyFiles="true" 
    Retries="3" 
    RetryDelayMilliseconds="300" />

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X