【问题标题】:"DestinationFiles" refers to 4 item(s), and "SourceFiles" refers to 1 item(s). They must have the same number of items“DestinationFiles”是指 4 个项目,“SourceFiles”是指 1 个项目。它们必须具有相同数量的项目
【发布时间】:2013-12-29 21:38:43
【问题描述】:

使用 MSBuild,我需要将转换配置文件复制到各个子目录。

我的目标正文中有以下代码

  <ItemGroup>
    <EnvironmentDirectory  Include="Environment\BackUp_Recovery\"/>
    <EnvironmentDirectory Include="Environment\IST\"/>
    <EnvironmentDirectory Include="Environment\Production\"/>
    <EnvironmentDirectory Include="Environment\UAT\"/>
  </ItemGroup>

<!-- Copy task to copy file to environment folders -->

 <Copy SourceFiles="$(IntermediateOutputPath)$(TargetFileName).config"
          DestinationFiles="@(EnvironmentDirectory -> '@(EnvironmentDirectory)$(TargetFileName).config')"
            SkipUnchangedFiles="true">
      <Output TaskParameter="CopiedFiles" ItemName="SuccessfullyCopiedFiles" />
    </Copy>

按原样,我收到以下错误消息。

“DestinationFiles”是指 4 个项目,“SourceFiles”是指 1 个项目。它们必须具有相同数量的项目。

当我查看输出窗口时,我观察到以下内容

2>任务“复制”(TaskId:73) 2> 任务参数:SourceFiles=obj\Release\AIT.UI.WinForm.exe.config (TaskId:73) 2> 任务参数: 2> 目标文件= 2> @(环境目录)AIT.UI.WinForm.exe.config 2> @(环境目录)AIT.UI.WinForm.exe.config 2> @(环境目录)AIT.UI.WinForm.exe.config 2> @(环境目录)AIT.UI.WinForm.exe.config (TaskId:73) 2> 任务参数:SkipUnchangedFiles=True (TaskId:73) 2>C:\AITDevelopment\AIT.UI.WinForm\AIT.UI.WinForm.csproj(634,5):错误MSB3094:“DestinationFiles”指的是4个项目,“SourceFiles”指的是1个项目)。它们必须具有相同数量的项目。 2>完成执行任务“复制”——失败。 (TaskId:73)

如果您能帮我解决这个问题,我将不胜感激。谢谢。

【问题讨论】:

  • 密切关注%(item.metadata)和@(item->'%(metadata)')的区别

标签: .net visual-studio build msbuild


【解决方案1】:

下面将根据 ItemGroup 将单个源文件...复制到多个位置。

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="AllTargetsWrapper" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <PropertyGroup>
        <WorkingCheckout>.</WorkingCheckout>
    </PropertyGroup>

    <Target Name="AllTargetsWrapper">
        <CallTarget Targets="CopyItTarget" />
    </Target>

    <ItemGroup>
        <EnvironmentDirectory  Include=".\Environment\BackUp_Recovery\"/>
        <EnvironmentDirectory Include=".\Environment\IST\"/>
        <EnvironmentDirectory Include=".\Environment\Production\"/>
        <EnvironmentDirectory Include=".\Environment\UAT\"/>
    </ItemGroup>    

    <PropertyGroup>
        <TargetFileName>system</TargetFileName>
    </PropertyGroup>    

    <Target Name="CopyItTarget">

    <Exec Command="echo %(EnvironmentDirectory.Identity)"/>

        <Copy SourceFiles="c:\windows\system.ini" 
         DestinationFiles="%(EnvironmentDirectory.Identity)$(TargetFileName).config"

        />  

    </Target>
</Project>

【讨论】:

    猜你喜欢
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 2014-12-11
    • 2021-12-10
    相关资源
    最近更新 更多