尝试排除执行递归复制(MSBuild)的某些扩展
我试图使用MSBuild从文本文件中读入文件列表,然后执行递归复制,将这些目录文件的内容复制到某个暂存区域,同时排除某些扩展名(例如.tmp文件) 我已经使用CreateItem和MSBuild copy任务轻松地完成了上述大部分工作,无论我做什么,CreateItem任务都会忽略我的排除参数:尝试排除执行递归复制(MSBuild)的某些扩展,msbuild,createitem,Msbuild,Createitem,我试图使用MSBuild从文本文件中读入文件列表,然后执行递归复制,将这些目录文件的内容复制到某个暂存区域,同时排除某些扩展名(例如.tmp文件) 我已经使用CreateItem和MSBuild copy任务轻松地完成了上述大部分工作,无论我做什么,CreateItem任务都会忽略我的排除参数: <PropertyGroup> <RootFolder>c:\temp</RootFolder> <ExcludeFilter>*.tmp<
<PropertyGroup>
<RootFolder>c:\temp</RootFolder>
<ExcludeFilter>*.tmp</ExcludeFilter>
<StagingDirectory>staging</StagingDirectory>
</PropertyGroup>
<ItemGroup>
<InputFile Include="MyFile.txt" />
</ItemGroup>
<Target Name="Build">
<ReadLinesFromFile File="@(InputFile)">
<Output ItemName="AllFolders" TaskParameter="Lines" />
</ReadLinesFromFile>
<CreateItem Include="$(RootFolder)\%(AllFolders.RelativeDir)**"
Exclude="$(ExcludeFilter)">
<Output ItemName="AllFiles" TaskParameter="Include" />
</CreateItem>
<Copy SourceFiles="@(AllFiles)"
DestinationFolder="$(StagingDirectory)\%(RecursiveDir)"
(即,路径是相对于$(RootFolder)
-提到这一点是因为我在某个地方读到它可能是相关的)
我尝试了大量不同的排除过滤器组合,但是我似乎永远无法让它正确地排除我的.tmp文件-有没有任何方法可以在不使用xcopy的情况下使用MSBuild执行此操作?您必须在绝对路径中指定
排除,并将排除通配符更改为包含子目录
如果对包括使用绝对路径,则必须对排除使用绝对路径。如果对包含使用相对路径,则必须对两者都使用相对路径
<PropertyGroup>
<RootFolder>c:\temp</RootFolder>
<ExcludeFilter>**\*.tmp</ExcludeFilter>
<StagingDirectory>staging</StagingDirectory>
</PropertyGroup>
<ItemGroup>
<InputFile Include="MyFile.txt" />
</ItemGroup>
<Target Name="Build">
<ReadLinesFromFile File="@(InputFile)">
<Output ItemName="AllFolders" TaskParameter="Lines" />
</ReadLinesFromFile>
<CreateItem Include="$(RootFolder)\%(AllFolders.RelativeDir)**"
Exclude="$(RootFolder)\%(AllFolders.RelativeDir)$(ExcludeFilter)">
<Output ItemName="AllFiles" TaskParameter="Include" />
</CreateItem>
<Copy SourceFiles="@(AllFiles)"
DestinationFolder="$(StagingDirectory)\%(RecursiveDir)"/>
</Target>
第二种方法:使用移除和条件
如果我想列出多个排除过滤器,例如***\\*.tmp;***\\*,怎么样。骨形态发生蛋白代码>?感谢您以多种方式发布!这种移除技术正是医生要求的!
<PropertyGroup>
<RootFolder>c:\temp</RootFolder>
<ExcludeFilter>**\*.tmp</ExcludeFilter>
<StagingDirectory>staging</StagingDirectory>
</PropertyGroup>
<ItemGroup>
<InputFile Include="MyFile.txt" />
</ItemGroup>
<Target Name="Build">
<ReadLinesFromFile File="@(InputFile)">
<Output ItemName="AllFolders" TaskParameter="Lines" />
</ReadLinesFromFile>
<CreateItem Include="$(RootFolder)\%(AllFolders.RelativeDir)**"
Exclude="$(RootFolder)\%(AllFolders.RelativeDir)$(ExcludeFilter)">
<Output ItemName="AllFiles" TaskParameter="Include" />
</CreateItem>
<Copy SourceFiles="@(AllFiles)"
DestinationFolder="$(StagingDirectory)\%(RecursiveDir)"/>
</Target>
<PropertyGroup>
<RootFolder>c:\temp</RootFolder>
</PropertyGroup>
<ItemGroup>
<InputFile Include="MyFile.txt" />
<!-- Exclude are defined here -->
<ExcludeFilters Include="$(RootFolder)\**\*.tmp"/>
<ExcludeFilters Include="$(RootFolder)\**\*.bmp"/>
</ItemGroup>
<Target Name="Build">
<ReadLinesFromFile File="@(InputFile)">
<Output ItemName="AllFolders" TaskParameter="Lines" />
</ReadLinesFromFile>
<CreateItem Include="$(RootFolder)\%(AllFolders.RelativeDir)**">
<Output ItemName="AllFiles" TaskParameter="Include" />
</CreateItem>
<!-- Removing the wrong extension in item -->
<ItemGroup>
<AllFiles Remove="@(ExcludeFilters)"/>
</ItemGroup>
<Copy SourceFiles="@(AllFiles)"
DestinationFolder="$(StagingDirectory)\%(RecursiveDir)"/>
</Target>
<Target Name="Build">
<ReadLinesFromFile File="@(InputFile)">
<Output ItemName="AllFolders" TaskParameter="Lines" />
</ReadLinesFromFile>
<CreateItem Include="$(RootFolder)\%(AllFolders.RelativeDir)**">
<Output ItemName="AllFiles" TaskParameter="Include" />
</CreateItem>
<!-- Removing the wrong extension in item -->
<ItemGroup>
<AllFiles Remove="@(AllFiles)" Condition="'%(Extension)' == '.tmp'"/>
<AllFiles Remove="@(AllFiles)" Condition="'%(Extension)' == '.bmp'"/>
</ItemGroup>
<Copy SourceFiles="@(AllFiles)"
DestinationFolder="$(StagingDirectory)\%(RecursiveDir)"/>
</Target>