VS2022文件夹发布模式如何配置发布前后运行批处理脚本?
实现方案
完全可以通过修改发布配置文件实现仅在发布环节触发自定义脚本,不需要额外CI/CD工具,操作步骤如下:
步骤1:定位发布配置文件
你创建的文件夹发布模式对应的配置文件默认存放在项目根目录的 Properties\PublishProfiles\ 路径下,后缀为.pubxml,属于标准MSBuild格式文件。
步骤2:添加发布前执行逻辑
打开对应.pubxml文件,在末尾的</Project>标签之前插入以下节点,实现发布前拷贝文件、停止IIS服务的逻辑:
<Target Name="CustomBeforePublish" BeforeTargets="BeforePublish"> <!-- 拷贝app_offline.htm到目标站点目录,路径可根据实际情况修改 --> <Copy SourceFiles="$(MSBuildProjectDirectory)\app_offline.htm" DestinationFolder="你的Web服务器站点根目录路径" /> <!-- 停止指定IIS站点,替换为你实际的站点名称 --> <Exec Command="%windir%\system32\inetsrv\appcmd stop site 你的站点名称" /> <!-- 可选:需要停止应用池的话取消注释下方代码,替换为实际应用池名称 --> <!-- <Exec Command="%windir%\system32\inetsrv\appcmd stop apppool 你的应用池名称" /> --> </Target>
如果前置逻辑比较复杂,也可以直接封装为独立的批处理文件,通过<Exec Command="批处理文件完整路径" />直接调用即可。
步骤3:添加发布后执行逻辑
继续在同一个.pubxml文件中插入发布后执行的节点,实现删除文件、恢复IIS服务的逻辑:
<Target Name="CustomAfterPublish" AfterTargets="AfterPublish"> <!-- 删除站点目录下的app_offline.htm --> <Delete Files="你的Web服务器站点根目录路径\app_offline.htm" /> <!-- 启动IIS站点 --> <Exec Command="%windir%\system32\inetsrv\appcmd start site 你的站点名称" /> <!-- 可选:之前停止了应用池的话取消注释下方代码 --> <!-- <Exec Command="%windir%\system32\inetsrv\appcmd start apppool 你的应用池名称" /> --> </Target>
验证说明
该配置绑定的是MSBuild发布阶段的专属事件,仅在你点击VS发布按钮、或者通过命令行调用发布目标时触发,普通的项目生成操作不会执行上述逻辑,完全符合你仅在发布环节执行脚本的要求。
内容的提问来源于stack exchange,提问作者SandroRiz
相关产品推荐
相关产品推荐

