2009-03-03 94 views
11

我创建了一个build.proj文件,其中包含一个任务,复制将在生成完成后生成的文件。问题在于这些文件在第一次复制时不会被复制,我必须在build.proj上再次运行msbuild,以便可以复制这些文件。请任何人都可以告诉我什么是错误的以下build.proj文件:MSBuild复制任务不复制文件的第一次

<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration> 

<SourcePath Condition="'$(SourcePath)' == ''">$(MSBuildProjectDirectory)</SourcePath> 

<BuildDir>$(SourcePath)\build</BuildDir> 

</PropertyGroup> 

<ItemGroup> 
    <Projects 
     Include="$(SourcePath)\src\myApp\application.csproj"> 
    </Projects> 
</ItemGroup> 

<Target Name="Build"> 
    <Message text = "Building project" />  
    <MSBuild 
    Projects="@(Projects)" 
    Properties="Configuration=$(Configuration)" /> 
</Target> 

<ItemGroup> 
    <OutputFiles Include ="$(MSBuildProjectDirectory)\**\**\bin\Debug\*.*"/> 
</ItemGroup> 

<Target Name="CopyToBuildFolder"> 
    <Message text = "Copying build items" /> 
    <Copy SourceFiles="@(OutputFiles)" DestinationFolder="$(BuildDir)"/> 
</Target> 

<Target Name="All" 
    DependsOnTargets="Build; CopyToBuildFolder"/> 

</Project> 
+0

内添加CreateItem标签修正你的代码的缩进请,这是不可理解的。 – 2009-03-03 14:40:48

+0

对不起插入脚本有点麻烦......现在一切都已排序 – Draco 2009-03-03 15:23:09

回答

21

itemgroups评估脚本解析时。那时你的文件还没有。为了能够找到文件,您必须从目标内填充项目组。

<!-- SQL Scripts which are needed for deployment --> 
    <Target Name="BeforeCopySqlScripts"> 
    <CreateItem Include="$(SolutionRoot)\04\**\Databases\**\*.sql"> 
     <Output ItemName="CopySqlScript" TaskParameter="Include"/> 
    </CreateItem> 
    </Target> 

本示例使用Include属性中的表达式创建名为“CopySqlScript”的ItemGroup。

编辑:

现在我可以读你的脚本:你CopyToBuildFolder目标