如何在.NET Core MVC项目中添加发布后执行PowerShell脚本的事件
配置调整方法
直接替换你现有配置里的CustomActionsAfterPublish目标节点内容即可,完整配置如下:
<?xml version="1.0" encoding="utf-8"?> <!-- https://go.microsoft.com/fwlink/?LinkID=208121. --> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <TargetFramework>netcoreapp3.0</TargetFramework> <ApplicationIcon /> <OutputType>Exe</OutputType> <StartupObject /> <UserSecretsId>f572b776-d17e-4de4-xxxx-xxxxxxxxxxx</UserSecretsId> </PropertyGroup> <Target Name="CustomActionsAfterPublish" AfterTargets="AfterPublish"> <Message Text="正在执行发布后脚本pb.ps1" Importance="high" /> <Exec WorkingDirectory="$(MSBuildProjectDirectory)" Command="powershell -NoProfile -ExecutionPolicy Bypass -File "$(MSBuildProjectDirectory)\pb.ps1"" /> </Target> </Project>
参数说明:
$(MSBuildProjectDirectory)是MSBuild内置变量,指向当前项目文件所在的根目录,避免相对路径定位错误-NoProfile跳过加载用户的PowerShell配置文件,加快执行速度,避免无关配置影响脚本-ExecutionPolicy Bypass临时绕过执行策略限制,仅对本次脚本执行生效"是XML中的转义双引号,用来包裹带空格的路径避免解析错误
执行策略相关说明
- 按照上面的配置加了
-ExecutionPolicy Bypass参数的情况下,不需要额外修改系统全局的PowerShell执行策略,不会影响系统其他设置 - 如果不加该参数,默认Windows的PowerShell执行策略为
Restricted,会禁止执行所有.ps1脚本,导致发布后事件报错 - 如果需要跨平台在Linux/macOS环境下发布,把命令里的
powershell改成pwsh,路径分隔符换成/即可
额外调试建议
如果脚本执行不符合预期,可以在发布时加-v d参数输出详细的构建日志,查看脚本执行的具体报错信息。如果需要给脚本传参,直接跟在文件路径后面即可,比如需要把发布目录传给脚本,可以写成:
powershell -NoProfile -ExecutionPolicy Bypass -File "$(MSBuildProjectDirectory)\pb.ps1" -PublishPath "$(PublishDir)"
内容的提问来源于stack exchange,提问作者lonelydev101
相关产品推荐
相关产品推荐

