2017-09-11 44 views
1

我有一个将源文件复制到暂存目录的目标,这发生在多个项目中。在以后的项目中,这些文件被传递到一种编译器中。使用msbuild安全删除陈旧的文件

当前暂存目录没有被清除,所以当一个源文件被删除时,一个陈旧的副本将驻留在暂存目录中。

什么是最好的方式来清除过时的文件的临时目录,而不会对增量构建时间产生负面影响? (即无需每次都完全删除临时目录。)

+0

我我不确定你想要达到什么,可能是因为你使用了奇怪的术语。通常当人们在构建系统的背景下讨论'清理'时,这是一个你运行'构建'的对立面的步骤,它会删除构建所创建的所有文物。所以在清理目录和删除目录之间没有真正的区别?我认为你的意思是别的,究竟是什么?提供一个你想要发生什么的具体例子。 – stijn

+0

@stijn当然。在构建期间,来自目录A的文件被复制到目录B以获得一组项目。在以后的项目中(同样的解决方案),目录B中的所有文件都被编译。在构建(或清洁构建)中,删除了目录B中的文件。因此,如果您从目录A(源代码管理)中删除一个文件,它将保留在目录B中,除非手动删除。我想在开始构建时删除目录B中的这些“陈旧”文件,而不是简单地删除整个目录B(这会影响增量构建)。那有意义吗? – Cuthbert

+0

类别。所以基本上你需要一个额外的构建步骤,它在实际构建之前运行,并且列出了dir B中的所有文件,然后删除那些不在dir A中的文件?或者你有什么作为A的主要清单;你确实需要一个列表,否则这是猜测。你应该发布代码,显示如何复制donde,从哪里获得输入文件等。并将这些信息添加到你的问题(就像上面的评论中的信息实际上也属于你的问题一样)。 – stijn

回答

0

结束了使用脚本的此位来清理其已从源中删除的文件,但仍存在目标:

<Target Name="DeleteStaleFiles"> 
    <!-- Remove stale files (files which have been deleted at the source but still exist in the destination). --> 
    <ItemGroup> 
     <SourceFiles Include="@(SourceFiles->'$(Destination)\%(RecursiveDir)%(Filename)%(Extension)')" /> 
     <DestinationFiles Include="$(Destination)**\*.*" /> 
     <StaleFiles Include="@(DestinationFiles)" Exclude="@(SourceFiles)" /> 
    </ItemGroup>  
    <Message Text="Deleting Stale Files: @(StaleFiles, '%0A')" Condition="'@(StaleFiles->Count())' &gt; 0"/> 
    <Delete Files="@(StaleFiles)"/>  
    </Target>