MSBuild在同一表达式中的几个元数据请求

时间:2011-02-03 15:45:56

标签: msbuild

我正在编写我的第一个MSBuild脚本并遇到了问题。

我有几个项目,在项目组中定义

<ItemGroup>
  <Projects Include="Project1Dir\Project1.csproj"/>
  <Projects Include="Project2Dir\Project2.csproj"/>
</ItemGroup>

然后,在部署步骤中,我正在尝试这样做:

以下内容应收集部署到每个项目的单独项目组中的所有文件(“Project1deploymentFiles”和“Project2deploymentFiles”)

<CreateItem Include="$(WebPublishDir)\%(Projects.Filename)\**\*.*">
  <Output ItemName="%(Projects.Filename)deploymentFiles" TaskParameter="Include"/>
</CreateItem>

Thes行,应该将每个项目的文件复制到单独的文件夹

<Copy SourceFiles="@(%(Projects.Filename)deploymentFiles)" DestinationFolder="$(DeploymentDir)\%(Projects.Filename)\%(RecursiveDir)\" />

但似乎MSBuild将%(RecursiveDir)元数据解析为空字符串,因为所有文件都被复制到同一个根文件夹(每个项目都不同)。

有什么建议我在这里做错了吗?

1 个答案:

答案 0 :(得分:1)

我自己找到了解决方案:

<CreateItem Include="$(WebPublishDir)\%(Projects.Filename)\**\*.*" AdditionalMetadata="ProjectDir=%(Projects.Filename)\">
  <Output ItemName="deploymentFiles" TaskParameter="Include"/>
</CreateItem>

<Copy SourceFiles="@(deploymentFiles)" DestinationFolder="$(DeploymentDir)\%(ProjectDir)\%(RecursiveDir)\" />

这里的主要想法是为所有项目使用一个项目,只需将AdditionalMetadata添加到值,包含projectname