MSBuild:添加和删除文件到msbuild 15发布输出@ BeforeTargets =“PrepareForPublish”

时间:2017-08-27 12:41:57

标签: msbuild

我想在msbuild 15中发布时添加和删除文件。

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="wwwroot\" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
  </ItemGroup>

  <!-- My target, which is only executed on publication , Which is desirable in my case -->
  <Target Name="MyPrepareForPublish" BeforeTargets="PrepareForPublish">

    <!-- Delete old files in wwwroot from Content -->
    <ItemGroup>
        <Content Remove="wwwroot\**"/>
    </ItemGroup>

    <!-- I Add and removes files to file system in wwwroot here , Exclude="@(Content)" prevents duplicates from outside wwwroot -->

    <!-- Adding new files to Content form wwwroot -->
    <ItemGroup>
        <Content Include="wwwroot\**" Exclude="@(Content)"/>
    </ItemGroup>

 </Target>

</Project>

但是当我删除并添加文件时,我收到一条错误消息:

(109,5): Error MSB3030: Could not copy the file "C:\buildTest\WebsSrver\wwwroot\main.d158e9e1259986c4bd76.bundle.js" because it was not found.

我的代码删除了“main.d158e9e1259986c4bd76.bundle.js”并在MyPrepareForPublish中创建了一个新名称。

这些文件位于我的dotnet核心项目的wwwroot中。

那么如何指定发布输出中应该包含哪些内容?

提前致谢!

1 个答案:

答案 0 :(得分:1)

在预发布目标期间添加文件时,SDK还会添加相应的ContentWithTargetPath项。但是,SDK不会跟踪删除,因此Content项的修改与此无关,因为发布目标仅使用ContentWithTargetPath

您应该能够解决问题,方法是删除项目组,删除并重新添加Content项,然后在自定义步骤运行后删除剩余的ContentWithTargetPath,如下所示:

<ItemGroup>
    <ContentWithTargetPath Remove="@(ContentWithTargetPath)" Condition="!Exists('%(FullPath)')" />
</ItemGroup>

2.0.0 SDK会自动为新生成的文件添加ContentWithTargetPath