【发布时间】:2020-02-09 09:12:38
【问题描述】:
我创建了发布到文件系统的发布配置文件,我需要在从 Visual Studio 2017 的上下文菜单发布完成后运行自定义脚本。
【问题讨论】:
-
我认为您可以在
xxxx.csproj文件中创建一个自定义目标,其中包含运行xxx.ps1的命令。
标签: msbuild visual-studio-2017 publish
我创建了发布到文件系统的发布配置文件,我需要在从 Visual Studio 2017 的上下文菜单发布完成后运行自定义脚本。
【问题讨论】:
xxxx.csproj 文件中创建一个自定义目标,其中包含运行 xxx.ps1 的命令。
标签: msbuild visual-studio-2017 publish
发布到文件系统 Visual Studio 2017 后运行自定义脚本
我认为您可以在xxxx.csproj 文件或xxxxxx.pubxml 文件中创建自定义目标。
就像这样:
<Target Name="RunCustomScript" AfterTargets="GatherAllFilesToPublish">
<Exec Command="xxxx\xxxx.ps1" />
</Target>
您可以在xxxx.csproj或xxxx.pubxml中设置此目标。
注意 GatherAllFilesToPublish 是发布进程的系统目标之一,当此自定义目标依赖于GatherAllFilesToPublish 时,它将始终运行并执行脚本 adter 发布进程。
更新 1
很抱歉没有及时了解您的要求。我假设您想要在所有导入的文件都发布到发布文件夹时进行一些操作,例如复制。
一般,此步骤不属于任何系统目标,MS 已确认,当发布到文件系统时,他们没有任何目标可在此之后启动。
"我们目前不支持在发布后执行自定义目标 来自 VS 的文件系统协议。”
不过我们可以试试这个方法:
1)创建一个使用AfterTargets="CopyAllFilesToSingleFolderForPackage" (runs just before the files are copied to the publish location)的自定义目标。
2) 在自定义目标中,使用脚本的异步执行AsyncExec,保证在脚本运行的同时执行发布文件到发布文件夹的操作。
3) 之后,在脚本中,内容的执行会延迟5秒(时间可以根据具体的发布时间而改变)打包文件),以确保脚本内容在系统发布所有文件后执行。
步骤
1) 将名为 MSBuild.Extension.Pack 的 nuget 包安装到您的项目中。
2) 创建自定义目标并使用其AsyncExec 执行您的脚本。
<Target Name="RunCustomScript" AfterTargets="GatherAllFilesToPublish">
<AsyncExec command="powershell.exe C:\Users\xxxxx\xxxx.ps1" />
</Target>
3) 打开你的脚本,请在所有内容的顶部加上这个,这意味着在执行脚本内容之前休眠5秒。
Start-Sleep -s 5 // 5 means 5 seconds
因此,脚本将在所有文件发布到publish 文件夹后执行。
希望对你有帮助。
【讨论】: