質問
ビルドの完了後に生成されるファイルをコピーするタスクで構成される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>
解決
スクリプトが解析されると、アイテムグループが評価されます。その時点では、ファイルはまだありません。ファイルを見つけることができるようにするには、ターゲット内からアイテムグループを埋める必要があります。
<!-- SQL Scripts which are needed for deployment -->
<Target Name="BeforeCopySqlScripts">
<CreateItem Include="$(SolutionRoot)\04\**\Databases\**\*.sql">
<Output ItemName="CopySqlScript" TaskParameter="Include"/>
</CreateItem>
</Target>
この例では、&quot; CopySqlScript&quot;という名前のItemGroupを作成します。 Include属性の式を使用します。
編集:
これでスクリプトを読むことができます:CopyToBuildFolderターゲット内にCreateItemタグを追加します
所属していません StackOverflow