我一直在编写一个基于MSBuild的构建系统,并且到项目结束时我需要通过批处理三个变量来实际运行一个msbuild文件88次:
Configuration = Debug; 测试版; 发布; 评估
平台= x86; x64
语言= CN; CS; DE; EN; ES; FR; 它; J.P; KO; PL; TW
我想构建:
"Debug x86 CN","Debug x86 CS",..."Debug x86 TW"
"Debug x64 CN",...
当然,我可以定义其中的88个:
<ItemGroup>
<ToBuild Include="Debug_x86_CN">
<Configuration>Debug</Configuration>
<Platform>x86</Platform>
<Language>EN</Language>
</ToBuild>
<ItemGroup>
Run Code Online (Sandbox Code Playgroud)
然后基于元数据批处理.但真是拖累!我可以在代码中创建88个排列,因此添加语言就像向ItemGroup添加三个字符一样简单:
<ItemGroup>
<AllConfigurations Include="Beta; Release; Evaluation;"/>
<AllPlatforms Include="x86; x64" />
<AllLanguages Include="CN; CS; DE; EN; ES; FR; IT; JP; KO; PL; TW" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
感谢Anders Ljusberg在几年前发布的答案.解决方案是使用CreateItem任务将各个ItemGroup组合成一个ItemGroup.每个项目的交叉产品需要一次完成一个新的ItemGroup(在本例中为_Config_X_Language和_Config_X_Language_X_Platform)以防止空元数据泄漏(如果您尝试重用_Config_X_Language,您将获得具有空平台的项目,除了$(平台)中的平台.
<ItemGroup>
<Configuration Include="Beta; Release; Evaluation;"/>
<Platform Include="x86; x64" />
<Language Include="CN; CS; DE; EN; ES; FR; IT; JP; KO; PL; TW" />
</ItemGroup>
<!-- Create an ItemGroup that is the cross product of Configuration and Language: -->
<CreateItem Include="@(Configuration)" AdditionalMetadata="Language=%(Language.Identity);" >
<Output ItemName="_Config_X_Language" TaskParameter="Include"/>
</CreateItem>
<!-- Create another ItemGroup that is the cross product of _Configuration_X_Language and Platform: -->
<CreateItem Include="@(_Config_X_Language)" AdditionalMetadata="Platform=%(Platform.Identity);" >
<Output ItemName="_Config_X_Language_X_Platform" TaskParameter="Include"/>
</CreateItem>
<!-- Task batch over each unique set of metadata on AllBuilds -->
<MSBuild Projects="myproject.msbuild"
Properties="Configuration=%(_Config_X_Language_X_Platform.Identity);
Platform=%(_Config_X_Language_X_Platform.Platform);
Language=%(_Config_X_Language_X_Platform.Language);"
Targets="MyTarget"
BuildInParallel="true" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
951 次 |
| 最近记录: |