2011-02-03 37 views
1

我正在寫我的第一個MSBuild腳本並遇到問題。MSBuild在相同的表達式中的幾個元數據請求

我有幾個項目,在的ItemGroup定義

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

然後,在部署的步驟,我試圖做到這一點:

下應收集部署的所有文件到單獨itemgroups每個項目(「Project1deploymentFiles」和「Project2deploymentFiles」)

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

帖線,應該每個項目的文件複製到單獨的文件夾

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

但似乎的MSBuild解析%(RecursiveDir)元數據空字符串,因爲所有文件都複製到同一個根文件夾(每個項目不同)。

任何建議我在這裏做錯了什麼?

回答

1

我已經找到了自己的解決方案:

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

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

主要這裏的想法是用一個項目的所有項目,只是添加AdditionalMetadata到值,包含項目名稱