Copy files to output directory using csproj dotnetcore

There’s quite a few ways to achieve your goals, depending on what your needs are.

The easiest approach is setting the metadata (CopyToOutputDirectory / CopyToPublishDirectory) items conditionally (assuming .txt being a None item instead of Content, if it doesn’t work, try <Content> instead):

<ItemGroup Condition="'$(Configuration)' == 'Debug'">
  <None Update="foo.txt" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

If more control is required, the most versatile approach is to add custom targets that hook into the build process in the csproj file:

<Target Name="CopyCustomContent" AfterTargets="AfterBuild">
  <Copy SourceFiles="foo.txt" DestinationFolder="$(OutDir)" />
</Target>
<Target Name="CopyCustomContentOnPublish" AfterTargets="Publish">
  <Copy SourceFiles="foo.txt" DestinationFolder="$(PublishDir)" />
</Target>

This copies a file to the respective directories. For more options for the <Copy> task, see its documentation. To limit this to certain configurations, you can use a Condition attribute:

<Target … Condition=" '$(Configuration)' == 'Release' ">

This Condition attribute can be applied both on the <Target> element or on task elements like <Copy>.

Leave a Comment