我想在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中。
那么如何指定发布输出中应该包含哪些内容?
提前致谢!
答案 0 :(得分:1)
在预发布目标期间添加文件时,SDK还会添加相应的ContentWithTargetPath
项。但是,SDK不会跟踪删除,因此Content
项的修改与此无关,因为发布目标仅使用ContentWithTargetPath
。
您应该能够解决问题,方法是删除项目组,删除并重新添加Content
项,然后在自定义步骤运行后删除剩余的ContentWithTargetPath
,如下所示:
<ItemGroup>
<ContentWithTargetPath Remove="@(ContentWithTargetPath)" Condition="!Exists('%(FullPath)')" />
</ItemGroup>
2.0.0 SDK会自动为新生成的文件添加ContentWithTargetPath
。