Msbuild 如何执行不带';是否覆盖现有文件?
查看,我看不到一种明显的方法可以在不覆盖目标位置现有文件的情况下复制文件。我只想复制新文件 到目前为止,我所拥有的:Msbuild 如何执行不带';是否覆盖现有文件?,msbuild,Msbuild,查看,我看不到一种明显的方法可以在不覆盖目标位置现有文件的情况下复制文件。我只想复制新文件 到目前为止,我所拥有的: 在链接中有一个属性“SkipUnchangedFiles”。将其添加到复制任务中,并将其设置为“true” 当我运行msbuild.exe CopyNew.proj时,我得到以下输出: Build: PackagesToCopy src\doc1.txt;src\doc3.txt;src\doc5.txt 因此,现在@(包)不再包含目标文件夹中存在的文件 仅当源文件比目标文
在链接中有一个属性“SkipUnchangedFiles”。将其添加到复制任务中,并将其设置为“true” 当我运行msbuild.exe CopyNew.proj时,我得到以下输出:
Build:
PackagesToCopy src\doc1.txt;src\doc3.txt;src\doc5.txt
因此,现在@(包)不再包含目标文件夹中存在的文件 仅当源文件比目标文件新时,
SkipUnchangedFiles=“true”
选项才会复制文件
有时,您需要只复制目标文件夹中不存在的文件,而不进行任何文件日期比较。在这种情况下,您可以对复制任务使用条件:
<Copy SourceFiles="%(Packages.Identity)" DestinationFolder="$(TargetDir)" SkipUnchangedFiles="true" Condition="!(Exists(@(Packages->'$(TargetDir)%(Filename)%(Extension)')))" />
条件属性可用于筛选源文件:
<Copy SourceFiles="@(SourceFiles)" DestinationFiles="$(DestinationPath)%(RecursiveDir)%(Filename)%(Extension)" Condition="!Exists('$(DestinationPath)%(RecursiveDir)%(Filename)%(Extension)')" />
不一样。源中的文件可能已更改,但不应再覆盖该文件。我不想用更改覆盖文件。啊!通过“我只想要更新的文件”,我假设我们正在查看日期戳,但您希望仅当目标文件不存在时才进行复制?请注意,如果文件大小和上次修改时间相同,SkipUnChangedFile将跳过文件(根据文档)。这与仅当源文件比目标文件新时才复制文件不同。
Build:
PackagesToCopy src\doc1.txt;src\doc3.txt;src\doc5.txt
<Copy SourceFiles="%(Packages.Identity)" DestinationFolder="$(TargetDir)" SkipUnchangedFiles="true" Condition="!(Exists(@(Packages->'$(TargetDir)%(Filename)%(Extension)')))" />
<Copy SourceFiles="@(SourceFiles)" DestinationFiles="$(DestinationPath)%(RecursiveDir)%(Filename)%(Extension)" Condition="!Exists('$(DestinationPath)%(RecursiveDir)%(Filename)%(Extension)')" />