我正在编写我的第一个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)元数据解析为空字符串,因为所有文件都被复制到同一个根文件夹(每个项目都不同)。
有什么建议我在这里做错了吗?
答案 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