MSBuildのコピータスクが初めてファイルをコピーしない

StackOverflow https://stackoverflow.com/questions/606605

  •  03-07-2019
  •  | 
  •  

質問

ビルドの完了後に生成されるファイルをコピーするタスクで構成される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タグを追加します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top