Ho una situazione in cui ho bisogno di copiare alcuni file specifici in uno script MSBuild, ma possono o non possono esistere. Se non esistono, va bene, quindi non ne ho bisogno. Tuttavia, l'attività standard <copy>
genera un errore se non riesce a trovare tutti gli elementi nell'elenco ...MSBuild - come copiare file che possono o non possono esistere?
22
A
risposta
39
Utilizzare la condizione Ex. in Attività di copia.
<CreateItem Include="*.xml">
<Output ItemName="ItemsThatNeedToBeCopied" TaskParameter="Include"/>
</CreateItem>
<Copy SourceFiles="@(ItemsThatNeedToBeCopied)"
DestinationFolder="$(OutputDir)"
Condition="Exists('%(RootDir)%(Directory)%(Filename)%(Extension)')"/>
5
Il modo più semplice sarebbe quella di utilizzare il flag 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>
Ma se qualcosa è sbagliato che non se ne accorgeranno. Quindi la condizione esiste dalla risposta di madgnome sarebbe meglio.
0
Sembra che sia possibile contrassegnare MySourceFiles come SkipUnchangedFiles = "true" e non copierà i file se già esistono.
Grazie! Mi ero dimenticato di questi! :) –
Vale anche la pena ricordare che invece di '% (RootDir)% (Directory)% (Filename)% (Extension)', si può semplicemente usare '% (FullPath)' (vedere http://msdn.microsoft. it/it/us/library/ms171476.aspx) – AASoft
Ricorda che quando si utilizza la trasformazione quando si fornisce 'SourceFiles', è necessario fornire la stessa trasformazione esatta in' Condizione' – patryk