2013-12-11 39 views
1

使用MSBuild,我需要將轉換配置文件複製到各個子目錄。「DestinationFiles」是指4個項目,「SourceFiles」是指1個項目。他們必須具有相同數量的項目

我有低於我的目標的身體

<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 \發佈\ AIT.UI.WinForm 2> @(EnvironmentDirectory)AIT.UI.WinForm.exe.config 2> @(EnvironmentDirectory)AIT.UI.WinForm.exe(TaskId:73) 2>任務參數: 2> DestinationFiles = 2 .config 2> @(EnvironmentDirectory)AIT.UI.WinForm.exe.config 2> @(EnvironmentDirectory)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)

我希望在解決此問題上有任何幫助。謝謝。

+0

密切關注%(item.metadata)和@(item - >'%(metadata)'之間的差異) – Nicodemeus

回答

0

下面將根據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> 
相關問題