我想从msbuild“项目”中提取所有没有元数据的成员(如果我使用的术语错误,请原谅我。)
这是我的背景:我正在准备用于创建安装软件包的文件。应该放入软件包中的文件是在“项目”中定义的,如下所示:
<ItemGroup>
<Files Include="readme.txt" />
<Files Include="myfile.txt">
<Rename>help.txt</Rename>
</Files>
<Files Include="changes.log" />
<!-- more files -->
</ItemGroup>
虽然应按原样包含readme.txt,但应将myfile.txt重命名为help.txt,因为有人认为myfile.txt是一个不好的名字。 我创建了一个序列(在Target内),用于重命名具有“重命名”元数据的文件。
<ItemGroup>
<FilesToRename Include="@(ChangeLogs->HasMetadata('Rename'))"/>
</ItemGroup>
<Move SourceFiles="@(FilesToRename->'$(WorkDir)\source\%(Identity)')" DestinationFiles="@(FilesToRename->'$(WorkDir)\source\%(Rename)')" />
要将这些文件复制到安装包中,我需要一个由重命名文件的“重命名”名称和其他文件的原始名称组成的项目;在此示例中,“ readme.txt; help.txt; changes.log”(以任何顺序)。我的第一次尝试是从上方使用“ FilesToRename”,并添加“ inverted”表达式,如下所示:
<FilesToCopy Include="@(FilesToRename->'%(Rename)')" />
<FilesToCopy Include="@(Files->Not HasMetadata('Rename'))" />
,但不会扩展。我也无法像“ pd”那样制作“条件”作品
<FilesToCopy Include="@(Files)" Condition="Not @(Files->HasMetadata('Rename'))/>
这只会导致语法错误“发现了意外令牌”。
任何想法都会受到赞赏。
谢谢 汉斯
答案 0 :(得分:0)
我本来可以想到这个解决方案的...
<FilesToCopy Include="@(FilesToRename->'%(Rename)')" />
<FilesToCopy Include="@Files" Exclude="@(Files->HasMetadata('Rename'))" />
那么简单...