Jus*_*tin 16 msbuild createitem
我正在尝试使用MSBuild从文本文件中读取文件列表,然后执行递归复制,将这些目录文件的内容复制到某个临时区域,同时排除某些扩展名(例如.tmp文件)
我已经设法使用CreateItem和MSBuild复制任务轻松完成上述大部分任务,无论我做什么,CreateItem任务都忽略了我的Exclude参数:
<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)"
Run Code Online (Sandbox Code Playgroud)
'MyFile.txt'的示例内容:
somedirectory\
someotherdirectory\
Run Code Online (Sandbox Code Playgroud)
(即路径是相对的$(RootFolder)- 提到这个,因为我读到某个地方可能是相关的)
我已经尝试了大量不同的Exclude过滤器组合,但我似乎无法让它正确排除我的.tmp文件 - 有没有办法用MSBuild做这个而不诉诸xcopy?
Jul*_*rau 28
你必须指定Exclude的绝对路径,改变排除通配符包括子目录
如果使用绝对路径Include,则必须使用绝对路径Exclude.如果使用相对路径Include,则必须为两者使用相对路径.
<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>
Run Code Online (Sandbox Code Playgroud)
如果要排除多个项目,则在使用绝对路径时没有干净的方法,但可以使用Remove.
<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>
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9138 次 |
| 最近记录: |