1

さまざまなソリューションをビルドし、Web配置プロジェクトの出力を次のように2つのサブフォルダーを持つ宛先フォルダーにコピーするMsBuildプロジェクトがあります。

WDP出力フォルダーは、BuildFolderの「リリース」からコピーされます。

DestFolder / PresentationTier / MyProject.xxx0Services_deploy / ** Release ** / Files .. ..    
DestFolder / MidTier / MyProject.xx1UI_deploy / ** Release ** / Files .. ..

$(Configuration)これは機能しますが、出力から値を削除したいと思います。

したがって、必要な出力フォルダのレイアウトは次のようになります。

DestFolder / PresentationTier / MyProject.xxx0Services_deploy / Files .. ..    
DestFolder / MidTier / MyProject.xx1UI_deploy / Files .. ..

「リリース」フォルダの削除に注意してください

私のコードは以下の通りです。

これを変更して、希望するものを提供するにはどうすればよいですか。

コードの抜粋は次のとおりです

  <Target Name="CopyMidTierBuildOutput" DependsOnTargets="CopyPresentationTierBuildOutput" >
<Message Text="Copying midTier Build Output=================" />

<CreateItem Include="$(DeploymentRoot)**/MyProject.xxx0Services_deploy/$(Configuration)/**/*.*;
            $(DeploymentRoot)**/MyProject.xxx1Services.Host_deploy/$(Configuration)/**/*.*;
            $(DeploymentRoot)**/MyProject.xxx2.Host.IIS.csproj_deploy/$(Configuration)/**/*.*;
            $(DeploymentRoot)**/MyProject.xxx3Services_deploy/$(Configuration)/**/*.*;
            $(DeploymentRoot)**/Nad.xxx4_deploy/$(Configuration)/**/*.*;
            $(DeploymentRoot)**/Nad.xxx5Services.Host_deploy/$(Configuration)/**/*.*;
            $(DeploymentRoot)**/Nad.xxx6Services.Host_deploy/$(Configuration)/**/*.*;
            $(DeploymentRoot)**/Nad.xxx7Service.Host.IIS_deploy/$(Configuration)/**/*.*;
            $(DeploymentRoot)**/Nad.xxx8Services.Host_deploy/$(Configuration)/**/*.*;
            $(DeploymentRoot)**/Nad.xxx9Service.Host.IIS.csproj_deploy/$(Configuration)/**/*.*;
            $(DeploymentRoot)**/Nad.xxx10Services.Host_deploy/$(Configuration)/**/*.*">


  <Output TaskParameter="Include" ItemName="MidTierDeploys"/>

</CreateItem>


<Copy
    SourceFiles="@(MidTierDeploys)"
    DestinationFolder="$(DestFolder)/MidTier/%(RecursiveDir)" ContinueOnError="false"  />

4

1 に答える 1

1

MSBuild 4 の biltin 機能を使用して、期待される動作を実装できます。

  <ItemGroup>
    <DeploymentProjects Include="1_deploy" />
    <DeploymentProjects Include="2_deploy" />
  </ItemGroup>

 <Target Name="CopyMidTierBuildOutput" >
 <Message Text="Copying midTier Build Output" Importance="High"/>
  <ItemGroup>
    <MidTierDeploys Include="$(DeploymentRoot)**\%(DeploymentProjects.Identity)\$(Configuration)\**\*.*">
       <DeploymentProject>%(DeploymentProjects.Identity)</DeploymentProject>
    </MidTierDeploys>
  </ItemGroup>

  <Msbuild Targets="CopyDeploymentItem" 
           Projects="$(MSBuildProjectFile)" 
           Properties="ItemFullPath=%(MidTierDeploys.FullPath);ItemRecursiveDir=%(MidTierDeploys.RecursiveDir);ItemDeploymentProject=%(MidTierDeploys.DeploymentProject);Configuration=$(Configuration);DestFolder=$(DestFolder)"         /> 
</Target>

 <Target Name="CopyDeploymentItem" >
     <PropertyGroup>
         <ItemExcludePath>$(ItemDeploymentProject)\$(Configuration)</ItemExcludePath>
         <ItemDestRecursiveDirIndex>$(ItemRecursiveDir.IndexOf($(ItemExcludePath)))            </ItemDestRecursiveDirIndex>
         <ItemExcludePathLength>$(ItemExcludePath.Length)</ItemExcludePathLength>
         <ItemSkippingCount>$([MSBuild]::Add($(ItemDestRecursiveDirIndex),     $(ItemExcludePathLength)))</ItemSkippingCount>
         <ItemDestRecursiveDir>$(ItemRecursiveDir.Substring($(ItemSkippingCount)))</ItemDestRecursiveDir>
     </PropertyGroup>
    <Copy
        SourceFiles="$(ItemFullPath)"
        DestinationFolder="$(DestFolder)/MidTier/$(ItemDeploymentProject)/$(ItemDestRecursiveDir)"     ContinueOnError="false"  />
</Target>

詳細については、プロパティ関数を参照してください。

于 2011-02-21T16:02:54.740 に答える