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>.