【问题标题】:MSBuild, CreateItem to ItemGroup to binplace a target to multiple foldersMSBuild、CreateItem 到 ItemGroup 以将目标放置到多个文件夹
【发布时间】:2011-04-20 04:09:17
【问题描述】:

短篇小说:我有一个列表,其中包含一个名为 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>

【问题讨论】:

  • 抱歉,读了三遍,我不知道你想要完成什么,或者问题是什么,你能在你的问题中添加一堆额外的细节吗?
  • 添加了更多信息,这有帮助吗?
  • 您的文字提到了一个名为“someFolder”的文件夹,但我没有在 msbuild 中看到它被引用。您需要展示您的“Binplace”目标。 “Binplace”目标与 .csproj 有何关系,它是在导入的目标文件中还是在单独的 MSBuild 项目中?

标签: msbuild itemgroup createitem


【解决方案1】:
<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>

【讨论】:

  • 你可能已经反过来了。我需要我的属性组有一个要部署到的位置列表。所以 folder1folder2
  • 而 Binplacefolder 只是意味着将这个特定的放在别处,但如果此字段不存在,请将其放在属性组提到的所有位置
  • @gaganuprasad 我认为您对 PropertyGroup 构造的工作方式感到困惑。它只允许您创建不同的变量,而不是集合。 PropertyGroup 标签只允许您将这些属性分组到 xml 中的同一位置,并且不会以任何其他方式使它们相关。
猜你喜欢
  • 2010-10-30
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
  • 2010-09-09
  • 2021-03-21
  • 2023-03-11
相关资源
最近更新 更多