我创建了一个build.proj文件,该文件包含一个复制文件的任务,这些文件将在构建完成后生成。问题是第一次没有复制这些文件,我必须在build.proj上再次运行msbuild,以便可以复制文件。请任何人告诉我以下build.proj文件有什么问题:
<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 :(得分:22)
解析脚本时会评估项目组。那时你的文件还没有。为了能够找到您必须从目标中填充项目组的文件。
<!-- 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目标中添加CreateItem标签