2012-10-04 47 views
0

我在构建和复制.NET解决方案输出到部署文件夹时遇到了一个问题。MSBuild增量构建错误

我想要做的是。构建解决方案并将输出放入C:\ TempOutput

然后将C:\ TempOutput中的outfiles复制到另一个部署文件夹。

在第一个学尝试它会创建文件夹C:\ TempOutput和这个文件夹

也是它创建文件夹“EXEC \调试\ BIN”,但不会在C复制文件在创建输出DLL和EXE文件:\ TempOutput

日志说,

目标CopyBuildFiles: 跳过目标 “CopyBuildFiles”,因为它没有输出。

当我再次运行该脚本,这一次拷贝文件从c:\ TempOutput以“EXEC \调试\ BIN”

我这么想吗?为什么在第一次尝试时没有检测到输出?

以下是的MSBuild脚本

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Deploy"> 

    <PropertyGroup> 
    <ProjectName>Common Projects</ProjectName> 
    <SolutionFilePath>..\..\Solution\Solution.sln</SolutionFilePath> 

    <!--Build/Rebuild--> 
    <BuildType>Build</BuildType> 

    <!--Debug -> output : local--> 
    <!--Release -> output : local--> 
    <!--ProduDbg -> output : X:\Debug--> 
    <!--ProduRel -> output : X:\Release--> 

    <BuildMode>Debug</BuildMode> 

    <OutputPath>..\Exec\$(BuildMode)\Bin\</OutputPath> 
    <ExecPath>..\..\bin\$(BuildMode)</ExecPath> 

    <DestinitionFolder>$(OutputPath)</DestinitionFolder> 
    <SubDirPath>$(ExecPath)\**</SubDirPath> 

    <BuildFolder>C:\TempOutputs\</BuildFolder> 

    </PropertyGroup> 


    <ItemGroup> 
    <File Include=" 
      $(BuildFolder)\*.* 
      " 

      Exclude="   
      $(BuildFolder)\*.vshost* 
      " 
      > 

    </File> 

    </ItemGroup> 

    <Target Name="PreBuild"> 
    <MakeDir Directories="$(BuildFolder)" /> 
    <MakeDir Directories="$(DestinitionFolder)" /> 
    </Target> 

    <Target Name="Compile"> 

    <MakeDir Directories="$(BuildFolder)" /> 
    <!-- Build does build only--> 

    <Message Text="*******************************************************"/> 
    <Message Text="-->Building $(ProjectName)"/> 
    <Message Text="*******************************************************"/> 

    <Message Text="*******************************************************"/> 
    <Message Text="-->Building in [$(BuildMode) | $(BuildType)] mode"/> 
    <Message Text="*******************************************************"/> 

    <MSBuild Projects="$(SolutionFilePath)" Targets="$(BuildType)" Properties="Configuration=$(BuildMode);OutDir=$(BuildFolder)"/>  
    </Target> 


    <Target Name="CopyBuildFiles" 
      Inputs="@(File)" 
      Outputs= 
      "@(File->'$(DestinitionFolder)%(RecursiveDir)%(Filename)%(Extension)')"> 

    <Copy SourceFiles="@(File)" 
      DestinationFiles="@(File->'$(DestinitionFolder)%(RecursiveDir)%(Filename)%(Extension)')" 
      /> 
    </Target> 

    <Target Name="Deploy"> 

    <CallTarget Targets="PreBuild"/> 
    <CallTarget Targets="Compile"/> 

    <Message Text="*******************************************************"/> 
    <Message Text="@(File)"/> 
    <Message Text="$(DestinitionFolder)"/>  
    <Message Text="*******************************************************"/> 


    <CallTarget Targets="CopyBuildFiles"/> 
    </Target> 

</Project> 

回答

0

尝试改变这一点

<Target Name="CopyBuildFiles"    
      Inputs="@(File)" 
      Outputs="@(File->'$(DestinitionFolder)%(File.RecursiveDir)%(File.Filename)%(File.Extension)')"> 

     <Copy SourceFiles="@(File)" 
      DestinationFiles="@(File->'$(DestinitionFolder)%(File.RecursiveDir)%(File.Filename)%(File.Extension)')"/> 
    </Target>