Batch file msbuild项目组项目

Batch file msbuild项目组项目,batch-file,msbuild,msbuild-itemgroup,Batch File,Msbuild,Msbuild Itemgroup,我有一个正在执行批处理文件的msbuild文件 Msbuild文件: 我想获得下一个输出: Params = Green - Uno - Song Params = Red - Due - Movie Params = Blue - Movie - Picture 如何实现这一点?我找到了解决方案: <Project DefaultTarget="DoTheMagic" xmlns="http://schemas.microsoft.com/developer/msbuild/2003

我有一个正在执行批处理文件的msbuild文件

Msbuild文件:

我想获得下一个输出:

Params = Green - Uno - Song
Params = Red - Due - Movie
Params = Blue - Movie - Picture
如何实现这一点?

我找到了解决方案:

<Project DefaultTarget="DoTheMagic" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0">
<PropertyGroup Condition=" '$(TFP)'=='' ">
    <TFP>$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll</TFP>
    <TFP Condition=" !Exists('$(TFP)')">$(MSBuildFrameworkToolsPath)\Microsoft.Build.Tasks.v4.0.dll</TFP>
    <TFP Condition=" !Exists('$(TFP)')">$(windir)\Microsoft.NET\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll</TFP>
</PropertyGroup>

<UsingTask
    TaskName="Bukake"
    TaskFactory="CodeTaskFactory"       
    AssemblyFile="$(TFP)" >
    <ParameterGroup>
        <ItemsA Required="True" ParameterType="System.String"/>
        <ItemsB Required="True" ParameterType="System.String"/>
        <ItemsC Required="True" ParameterType="System.String"/>
        <Result ParameterType="Microsoft.Build.Framework.ITaskItem[]" Output="True"/>
    </ParameterGroup>
    <Task>                      
        <Code Type="Fragment" Language="cs">
            <![CDATA[
        string[] itemsA = ItemsA.Split(new char[] {';'}, StringSplitOptions.RemoveEmptyEntries);
        string[] itemsB = ItemsB.Split(new char[] {';'}, StringSplitOptions.RemoveEmptyEntries);
        string[] itemsC = ItemsC.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

        List<TaskItem> items = new List<TaskItem>();
        for (int index = 0; index < itemsA.Length; index++)
        {                            
            TaskItem item = new TaskItem();
            item.ItemSpec = "item";
            item.SetMetadata("itemA", itemsA[index]);
            item.SetMetadata("itemB", itemsB[index]);
            item.SetMetadata("itemC", itemsC[index]);
            items.Add(item);
        }
        Result = items.ToArray();                         
        ]]>
        </Code>
    </Task>
</UsingTask>

<PropertyGroup>
    <ItemAString>Green;Red;Blue</ItemAString>
    <ItemBString>Uno;Due;Tre</ItemBString>
    <ItemCString>Song;Movie;Picture</ItemCString>       
</PropertyGroup>

<Target Name = "CallBatch">    
    <Message Text="$(TFS)" />   
    <Bukake ItemsA="$(ItemAString)" 
            ItemsB="$(ItemBString)"
            ItemsC="$(ItemCString)">
        <Output TaskParameter="Result" ItemName="Dundonja" />
    </Bukake>

    <ItemGroup>                 
        <PreparedItems Include="@(Dundonja)"/>              
    </ItemGroup>
    <!-- <Message Text="Dundonja: %(Dundonja.Identity) %(Dundonja.itemA) %(Dundonja.itemB) %(Dundonja.itemC)"/>          -->
    <Exec Command="mybatch.bat Dundonja %(Dundonja.Identity) %(Dundonja.itemA) %(Dundonja.itemB) %(Dundonja.itemC)"/>
</Target>       

$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll
$(MSBuildFrameworkToolsPath)\Microsoft.Build.Tasks.v4.0.dll
$(windir)\Microsoft.NET\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll

项目=新列表();
对于(int index=0;index

绿色红色蓝色
联合国组织;到期的;特雷
歌曲电影;图画
我找到了解决方案:

<Project DefaultTarget="DoTheMagic" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0">
<PropertyGroup Condition=" '$(TFP)'=='' ">
    <TFP>$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll</TFP>
    <TFP Condition=" !Exists('$(TFP)')">$(MSBuildFrameworkToolsPath)\Microsoft.Build.Tasks.v4.0.dll</TFP>
    <TFP Condition=" !Exists('$(TFP)')">$(windir)\Microsoft.NET\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll</TFP>
</PropertyGroup>

<UsingTask
    TaskName="Bukake"
    TaskFactory="CodeTaskFactory"       
    AssemblyFile="$(TFP)" >
    <ParameterGroup>
        <ItemsA Required="True" ParameterType="System.String"/>
        <ItemsB Required="True" ParameterType="System.String"/>
        <ItemsC Required="True" ParameterType="System.String"/>
        <Result ParameterType="Microsoft.Build.Framework.ITaskItem[]" Output="True"/>
    </ParameterGroup>
    <Task>                      
        <Code Type="Fragment" Language="cs">
            <![CDATA[
        string[] itemsA = ItemsA.Split(new char[] {';'}, StringSplitOptions.RemoveEmptyEntries);
        string[] itemsB = ItemsB.Split(new char[] {';'}, StringSplitOptions.RemoveEmptyEntries);
        string[] itemsC = ItemsC.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

        List<TaskItem> items = new List<TaskItem>();
        for (int index = 0; index < itemsA.Length; index++)
        {                            
            TaskItem item = new TaskItem();
            item.ItemSpec = "item";
            item.SetMetadata("itemA", itemsA[index]);
            item.SetMetadata("itemB", itemsB[index]);
            item.SetMetadata("itemC", itemsC[index]);
            items.Add(item);
        }
        Result = items.ToArray();                         
        ]]>
        </Code>
    </Task>
</UsingTask>

<PropertyGroup>
    <ItemAString>Green;Red;Blue</ItemAString>
    <ItemBString>Uno;Due;Tre</ItemBString>
    <ItemCString>Song;Movie;Picture</ItemCString>       
</PropertyGroup>

<Target Name = "CallBatch">    
    <Message Text="$(TFS)" />   
    <Bukake ItemsA="$(ItemAString)" 
            ItemsB="$(ItemBString)"
            ItemsC="$(ItemCString)">
        <Output TaskParameter="Result" ItemName="Dundonja" />
    </Bukake>

    <ItemGroup>                 
        <PreparedItems Include="@(Dundonja)"/>              
    </ItemGroup>
    <!-- <Message Text="Dundonja: %(Dundonja.Identity) %(Dundonja.itemA) %(Dundonja.itemB) %(Dundonja.itemC)"/>          -->
    <Exec Command="mybatch.bat Dundonja %(Dundonja.Identity) %(Dundonja.itemA) %(Dundonja.itemB) %(Dundonja.itemC)"/>
</Target>       

$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll
$(MSBuildFrameworkToolsPath)\Microsoft.Build.Tasks.v4.0.dll
$(windir)\Microsoft.NET\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll

项目=新列表();
对于(int index=0;index

绿色红色蓝色
联合国组织;到期的;特雷
歌曲电影;图画

不确定这是否正确,但首先使用
$
访问变量,然后使用
%
访问变量。我对msbuild不感兴趣,但我的眼睛一下子就看出来了。四处搜索“叉积”,答案应该在这里的某个地方。示例:或或…不确定这是否正确,但首先使用
$
访问变量,然后使用
%
访问变量。我对msbuild不感兴趣,但我的眼睛一下子就看出来了。四处搜索“叉积”,答案应该在这里的某个地方。例子:或者。。。
<Project DefaultTarget="DoTheMagic" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0">
<PropertyGroup Condition=" '$(TFP)'=='' ">
    <TFP>$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll</TFP>
    <TFP Condition=" !Exists('$(TFP)')">$(MSBuildFrameworkToolsPath)\Microsoft.Build.Tasks.v4.0.dll</TFP>
    <TFP Condition=" !Exists('$(TFP)')">$(windir)\Microsoft.NET\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll</TFP>
</PropertyGroup>

<UsingTask
    TaskName="Bukake"
    TaskFactory="CodeTaskFactory"       
    AssemblyFile="$(TFP)" >
    <ParameterGroup>
        <ItemsA Required="True" ParameterType="System.String"/>
        <ItemsB Required="True" ParameterType="System.String"/>
        <ItemsC Required="True" ParameterType="System.String"/>
        <Result ParameterType="Microsoft.Build.Framework.ITaskItem[]" Output="True"/>
    </ParameterGroup>
    <Task>                      
        <Code Type="Fragment" Language="cs">
            <![CDATA[
        string[] itemsA = ItemsA.Split(new char[] {';'}, StringSplitOptions.RemoveEmptyEntries);
        string[] itemsB = ItemsB.Split(new char[] {';'}, StringSplitOptions.RemoveEmptyEntries);
        string[] itemsC = ItemsC.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

        List<TaskItem> items = new List<TaskItem>();
        for (int index = 0; index < itemsA.Length; index++)
        {                            
            TaskItem item = new TaskItem();
            item.ItemSpec = "item";
            item.SetMetadata("itemA", itemsA[index]);
            item.SetMetadata("itemB", itemsB[index]);
            item.SetMetadata("itemC", itemsC[index]);
            items.Add(item);
        }
        Result = items.ToArray();                         
        ]]>
        </Code>
    </Task>
</UsingTask>

<PropertyGroup>
    <ItemAString>Green;Red;Blue</ItemAString>
    <ItemBString>Uno;Due;Tre</ItemBString>
    <ItemCString>Song;Movie;Picture</ItemCString>       
</PropertyGroup>

<Target Name = "CallBatch">    
    <Message Text="$(TFS)" />   
    <Bukake ItemsA="$(ItemAString)" 
            ItemsB="$(ItemBString)"
            ItemsC="$(ItemCString)">
        <Output TaskParameter="Result" ItemName="Dundonja" />
    </Bukake>

    <ItemGroup>                 
        <PreparedItems Include="@(Dundonja)"/>              
    </ItemGroup>
    <!-- <Message Text="Dundonja: %(Dundonja.Identity) %(Dundonja.itemA) %(Dundonja.itemB) %(Dundonja.itemC)"/>          -->
    <Exec Command="mybatch.bat Dundonja %(Dundonja.Identity) %(Dundonja.itemA) %(Dundonja.itemB) %(Dundonja.itemC)"/>
</Target>