MSBuild解析项元数据

时间:2011-01-05 16:39:34

标签: msbuild .net-4.0 msdeploy

是否有修改项目组中的每个项目?例如,给定此项:

<_CustomAreas Include="..\My.Project.*\Areas\**\*.*" Condition="'$(AppBuildFolder)' == ''" />

我想删除“.. \ My.Product。*部分。基本上我们有包含MVC区域的单独项目,在Package / Deployment(MSDeploy)中我们要将它们复制到主项目中。这里是使用组:

<FilesForPackagingFromProject Include="%(_CustomAreas.Identity)">
    <DestinationRelativePath>Areas\%(relativedir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>

$(relativedir)以“.. \ My.Project.Plugin1 \ Areas * *。”的形式出现,它最终以ZipFileRoot\My.Project.Plugin1\Areas的形式出现在包中。 。退出硬编码区域,然后它只为插件\区域创建文件夹)我希望它实际上最终都在ZipFileRoot\Areas

由于 安迪

3 个答案:

答案 0 :(得分:0)

使用MsBuild 4.0您可以直接在脚本中使用String方法(或使用内联任务)。使用此选项,您可以编辑您的relativedir以删除My.Project。*部分。

您可以在本文中看到示例:http://sedodream.com/2010/03/07/MSBuild40PropertyFunctionsPart1.aspx

答案 1 :(得分:0)

RegexReplace(凭据:来宾/来宾)任务应该能够匹配\My.Product.*并替换为空字符串。

这样的事情应该有效:(未经测试,需要验证转义)

<RegexReplace Input="%(_CustomAreas)" Expression="\\My\.Product\..*" Replacement="" Count="-1">
    <Output ItemName="_CustomAreas" TaskParameter="Output" />
</RegexReplace>

MSBuild Community Tasks启动并运行有一点工作,但在那里有足够好的东西让我觉得值得付出努力。

答案 2 :(得分:0)

ItemGroups中的项目可以有一个Exclude属性,允许您指定要遗漏的项目。