title: Cross-Join ItemGroups in MSBuild
body: <p>Given something like so.. </p>
  
  <pre class="lang-xml prettyprint-override"><code> &lt;?xml version="1.0" encoding="utf-8"?&gt;
      &lt;Project DefaultTargets="test" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&gt;
          &lt;ItemGroup&gt;
              &lt;ConfigFiles Include="*.config" /&gt;
  
              &lt;DatabaseConfig Include="ABC"&gt;
                  &lt;Database&gt;DB1&lt;/Database&gt;
                  &lt;CsString&gt;Database&lt;/CsString&gt;
              &lt;/DatabaseConfig&gt;
  
              &lt;DatabaseConfig Include="DEF"&gt;
                  &lt;Database&gt;DB2&lt;/Database&gt;
                  &lt;CsString&gt;Logging&lt;/CsString&gt;
              &lt;/DatabaseConfig&gt;
          &lt;/ItemGroup&gt;
  
  
          &lt;Target Name="test" &gt;
              &lt;!-- Some sort of join here (or somewhere)... --&gt;
           &lt;Message Text=" %(Combined.ConfigFile) %(Combined.Database) " /&gt;
          &lt;/Target&gt; 
      &lt;/Project&gt;
  </code></pre>
  
  <p>I'd like the Output to be something like this.. (given two files one.config &amp; two.config)</p>
  
  <pre><code>one.config DB1
  two.config DB1
  one.config DB2
  two.config DB2
  </code></pre>
  
  <p>(the order is not important, just the full cartesian product of the two ItemGroups)</p>