Mike
Mike

Reputation: 582

Copy to Publish Directory output of PreBuild Event

Inside my csproj I have a pre-build event where I run the build of Vue js project. It outputs to a "dist" folder, and that is loaded by an cshtml file.

In the csproj file I have a reference to the dist folder and I tell it to copy to publish directory:

<ItemGroup>
  <Content Include="dist\**" CopyToPublishDirectory="Always" />
</ItemGroup>

On publish, MsBuild seems to be trying to copy the files in the dist folder that exist before the pre-build event starts. Is there an way to get MsBuild to copy the contents of the folder after the pre-build event?

Upvotes: 3

Views: 7192

Answers (2)

Martin Ullrich
Martin Ullrich

Reputation: 100543

In order to support all possible publish mechanisms that tooling (VS etc.) supports, I suggest setting it up similar to how the in-box angular template works:

<Target Name="PublishDistFiles" AfterTargets="ComputeFilesToPublish">
  <ItemGroup>
    <DistFiles Include="dist\**" />
    <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
      <RelativePath>%(DistFiles.Identity)</RelativePath>
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </ResolvedFileToPublish>
  </ItemGroup>
</Target>

Upvotes: 9

J. Tom
J. Tom

Reputation: 48

You can add a step to do it manually using the Copy task

<Target Name="MyCopyStep" AfterTargets="AfterPublish">
  <ItemGroup>
     <MyDistFiles Include="dist\**" />
  </ItemGroup>
  <Copy SourceFiles="@(MyDistFiles)" DestinationFiles="@(MyDistFiles->'$(PublishDir)\dist\%(RecursiveDir)%(Filename)%(Extension)')"/>
</Target>

Upvotes: 1

Related Questions