2012-10-04 81 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>