Visual Studio 2022 Community发布事件触发过早?如何删除发布目录appsettings.json
解决方案
问题根源在于你当前绑定的Publish目标仅完成了编译和输出到临时发布目录(PubTmp\Out),文件复制到最终PublishUrl的操作是在Publish目标之后执行的,因此你的bat脚本执行时,目标目录中还不存在appsettings.json。
以下是两种无需延时的解决方法:
方案一:发布时直接排除文件(推荐)
在MyWebApp.csproj中添加配置,让发布过程跳过appsettings.json的复制,比事后删除更高效:
<ItemGroup> <Content Update="appsettings.json" Publish="Never" /> </ItemGroup>
方案二:调整MSBuild目标触发时机
如果你必须在发布完成后删除文件,可修改目标的触发时机为文件复制完成后的PublishFileSystem目标,同时推荐直接使用MSBuild的Delete任务替代bat脚本(更简洁):
<Target Name="DeleteAppSettingsAfterPublish" AfterTargets="PublishFileSystem"> <Delete Files="$(PublishUrl)\appsettings.json" /> <Message Text="Deleted appsettings.json from $(PublishUrl)" Condition="Exists('$(PublishUrl)\appsettings.json')" /> <Message Text="appsettings.json not found in $(PublishUrl)" Condition="!Exists('$(PublishUrl)\appsettings.json')" /> </Target>
若需保留bat脚本,仅修改AfterTargets即可:
<Target Name="AfterPublishDelSet" AfterTargets="PublishFileSystem"> <Exec Command="dset.bat $(PublishUrl)" /> </Target>
内容的提问来源于stack exchange,提问作者puzzler
相关产品推荐
相关产品推荐

