我有以下任务,由于DestinationFiles和DestionationFolder的组合不起作用,但它抓住了我想要做的概念:
<CreateItem Include="$(Destination)\**\*.Generated.*.*">
<Output TaskParameter="Include" ItemName="GeneratedFiles" />
</CreateItem>
<Copy Condition=" '%(ConfigurationToBuild.FlavorToBuild)'=='Debug-All' Or '%(ConfigurationToBuild.FlavorToBuild)'=='Release-WebService' "
SourceFiles="@(GeneratedFiles)"
DestinationFiles="@(GeneratedFiles->'%(RecursiveDir)%(Filename)%(Extension)')"
DestinationFolder="$(BinariesRoot)\%(ConfigurationToBuild.PlatformToBuild)\%(ConfigurationToBuild.FlavorToBuild)"
/>
所以我有一组正在生成的文件(数据,而不是代码),这些文件需要复制到最终的二进制位置。
在这个版本中,我一次构建3个配置:Debug-All版本,Release-Client版本和Release-WebService。原因是保持相同的构建号和完全相同的代码库,同时让客户端和WebService项目“已发布”,然后由安装项目选择。
如果我尝试使用: DestinationFiles = “@(GeneratedFiles-&GT; '$(BinariesRoot)\%(ConfigurationToBuild.PlatformToBuild)\%(ConfigurationToBuild.FlavorToBuild)\%(RecursiveDir)%(文件名)%(扩展部分)')”
MSBuild在%(ConfigurationToBuild.FlavorToBuild)部分抛出错误。
答案 0 :(得分:0)
我找到了解决此问题的方法:即手动复制命令。 因此它不那么通用,并且在buildlog文件中产生更多的噪音,但至少它可以工作!
<!-- Copy the updated files to the Binariesroot to have them picked up by the Setups -->
<CreateItem Include="$(Destination)\**\*.Generated.*.sql">
<Output TaskParameter="Include" ItemName="GeneratedSqlFiles" />
</CreateItem>
<Message Text="GeneratedSqlFiles=@(GeneratedSqlFiles)->RecursiveDir=%(RecursiveDir) Filename=%(Filename)%(Extension)" />
<CreateProperty Condition=" '%(ConfigurationToBuild.FlavorToBuild)'=='Debug'"
Value="$(BinariesRoot)\%(ConfigurationToBuild.PlatformToBuild)\%(ConfigurationToBuild.FlavorToBuild)" >
<Output TaskParameter="Value" PropertyName="RealBinariesRoot" />
</CreateProperty>
<Copy Condition=" '%(ConfigurationToBuild.FlavorToBuild)'=='Debug'"
SourceFiles="@(GeneratedSqlFiles)"
DestinationFiles="@(GeneratedSqlFiles->'$(RealBinariesRoot)\Deployment\%(RecursiveDir)%(Filename)%(Extension)')"
/>
<CreateProperty Condition=" '%(ConfigurationToBuild.FlavorToBuild)'=='WebService'"
Value="$(BinariesRoot)\%(ConfigurationToBuild.PlatformToBuild)\%(ConfigurationToBuild.FlavorToBuild)" >
<Output TaskParameter="Value" PropertyName="RealBinariesRoot" />
</CreateProperty>
<Copy Condition=" '%(ConfigurationToBuild.FlavorToBuild)'=='WebService'"
SourceFiles="@(GeneratedSqlFiles)"
DestinationFiles="@(GeneratedSqlFiles->'$(RealBinariesRoot)\Deployment\%(RecursiveDir)%(Filename)%(Extension)')"
/>
同时也发现,如果你有一个'。'在CreateItem任务的Include路径中,不再填充RecursiveDir属性。 所以有
'drive:\ somefolder \ subfolder \ Sources \ Generated ***。Generated。*。sql'将提供%(RecursiveDir)元数据。 使用
'drive:\ somefolder \ subfolder \。\ Sources \ Generated ***。生成。* .sql',解析为与上面相同的路径 NOT 提供%(RecursiveDir)元数据。 (注意子文件夹和源之间的微妙'。'
Ofcourse(墨菲定律)我们用它来指定需要构建哪个分支。指向主分支; - )