MSBuild,CreateItem到ItemGroup将目标放置到多个文件夹

MSBuild,CreateItem到ItemGroup将目标放置到多个文件夹,msbuild,itemgroup,createitem,Msbuild,Itemgroup,Createitem,短篇故事:我有一个属性为true的列表。我想把所有这些文件复制到一个文件夹列表中,比如说由 文件夹 为此,我今天要做的是: <CreateItem Include="%(Reference.HintPath)" Condition="'%(Reference.Binplace)' == 'true'" AdditionalMetadata="DestinationFolder=$(DestinationForRefer

短篇故事:我有一个属性为true的列表。我想把所有这些文件复制到一个文件夹列表中,比如说由

文件夹

为此,我今天要做的是:

    <CreateItem Include="%(Reference.HintPath)"
                Condition="'%(Reference.Binplace)' == 'true'"
                AdditionalMetadata="DestinationFolder=$(DestinationForReferences)\%(Reference.BinplaceFolder)">
        <Output ItemName="Binplace" TaskParameter="Include" />
    </CreateItem>

我已经有一个名为Binplace的目标,它在内部调用Copy。问题是这是一个元素,我不知道如何在多个项目上调用Copy

在我的CSPROJ文件中,我这样做:

    <Reference Include="MyCompany.Something.Something">
        <HintPath>$(LocalLibraryFolder)\MyCompany.Something.Something.dll</HintPath>
        <Binplace>true</Binplace>
    </Reference>

$(LocalLibraryFolder)\MyCompany.Something.Something.dll
真的

$(LocalLibraryFolder)\1.dll
真的
子文件夹1 \子文件夹12
$(LocalLibraryFolder)\2.dll
真的
子文件夹2\子文件夹22
.
.
$(DestinationForReferences)\%(Reference.BinplaceFolder)

$(LocalLibraryFolder)\1.dll
真的
子文件夹1 \子文件夹12
$(LocalLibraryFolder)\2.dll
真的
子文件夹2\子文件夹22
.
.
$(DestinationForReferences)\%(Reference.BinplaceFolder)

抱歉,请将此内容阅读三遍,我不知道您要完成的是什么,或者问题是什么,能否为您的问题添加一系列其他详细信息?添加了更多信息,这是否有帮助?您的文本提到了名为“someFolder”的文件夹,但我在msbuild中没有看到它被引用。您需要显示您的“Binplace”目标。“Binplace”目标与.csproj的关系如何?它是在导入的目标文件中还是在单独的MSBuild项目中?抱歉,请阅读三遍,我不知道您试图完成什么,或者问题是什么,您能否为您的问题添加一系列其他详细信息?添加了更多信息,这有帮助吗?您的文本提到了一个名为“someFolder”的文件夹,但我在msbuild中没有看到它被引用。您需要显示您的“Binplace”目标。“Binplace”目标与.csproj的关系如何?它是在导入的目标文件中还是在单独的MSBuild项目中?您可能会反过来得到它。我需要我的propertygroup有一个要部署到的位置列表。所以folder1folder2和Binplacefolder的意思就是把这个特定的文件夹放到别处,但是如果这个字段不存在,就把它放到propertygroup@gaganuprasad我认为您对PropertyGroup构造的工作原理感到困惑。它只允许您创建不同的变量,而不允许创建集合。PropertyGroup标记只允许您将这些属性分组到xml中的同一位置,而不会以任何其他方式将它们关联起来。我需要我的propertygroup有一个要部署到的位置列表。所以folder1folder2和Binplacefolder的意思就是把这个特定的文件夹放到别处,但是如果这个字段不存在,就把它放到propertygroup@gaganuprasad我认为您对PropertyGroup构造的工作原理感到困惑。它只允许您创建不同的变量,而不允许创建集合。PropertyGroup标记只允许您将这些属性分组到xml中的同一位置,而不以任何其他方式将它们关联起来。
<ItemGroup>
    <Reference Include="1">
        <HintPath>$(LocalLibraryFolder)\1.dll</HintPath>
        <Binplace>true</Binplace>
        <BinplaceFolder>SubFolder1\SubFolder12</BinplaceFolder>
    </Reference>
    <Reference Include="2">
        <HintPath>$(LocalLibraryFolder)\2.dll</HintPath>
        <Binplace>true</Binplace>
        <BinplaceFolder>SubFolder2\SubFolder22</BinplaceFolder>
    </Reference>
</ItemGroup>
<PropertyGroup>
     <LocalLibraryFolder>.</LocalLibraryFolder>
     <DestinationForReferences>.</DestinationForReferences>
</PropertyGroup>

<Target Name="CopyReferencedBinaries"
        Outputs="%(Reference.Identity)">    
     <ItemGroup>
          <SourceBinaryFullPath Include="%(Reference.HintPath)" />              
     </ItemGroup>
     <PropertyGroup>
          <SourceBinaryDir>$(DestinationForReferences)\%(Reference.BinplaceFolder)</SourceBinaryDir>
     </PropertyGroup>
     <MakeDir Directories="$(SourceBinaryDir)"
              Condition="!Exists('$(SourceBinaryDir)')"/>
     <Copy SourceFiles="@(SourceBinaryFullPath)"
           DestinationFiles="@(SourceBinaryFullPath->'$(SourceBinaryDir)\%(Filename)%(Extension)')" />
</Target>