如何从 GitHub 操作中升级 Visual Studio 项目?
Posted
技术标签:
【中文标题】如何从 GitHub 操作中升级 Visual Studio 项目?【英文标题】:How to upgrade a Visual Studio project from within a GitHub action? 【发布时间】:2020-12-14 10:35:49 【问题描述】:可以使用devenv.exe
命令从命令行升级 Visual Studio 项目,如下所示:
devenv.exe SOLUTION_PATH /Upgrade
其中 SOLUTION_PATH 是 Visual Studio 解决方案(或项目)文件的路径。
在 GitHub 操作中执行此步骤的最直接方法是什么?
我的尝试
到目前为止,我还没有找到让devenv.exe
进入 GitHub Action 路径的方法。似乎没有为此预先构建的操作步骤(setup-msbuild
步骤不会使devenv
可用)。甚至硬编码路径,例如
MSDEVENV_PATH: $'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\devenv.com'
... then later ...
run: $env.MSDEVENV_PATH $env.SOLUTION_FILE_PATH /Upgrade
因为路径包含空格而失败,我找不到添加引号的方法。
我知道a way to find devenv using powershell and extra downloadable packages,但这需要编写一个 PowerShell 脚本,并且可能需要对其进行签名,而且我不知道这是否可以在 GitHub Action 中使用。也许有一个更简单的方法,因此我的问题是:升级解决方案最直接的方法是什么?
【问题讨论】:
这个Upgrade
实际上是做什么的?
@KrzysztofMadej 它将项目文件版本从 .vcproj 升级到 .vcxproj:docs.microsoft.com/lb-lu/visualstudio/ide/reference/…
【参考方案1】:
您需要一个基于 Windows 的运行器。 vswhere
是获取 Visual Studio 安装各个组件路径的工具,其文件夹位于路径 (source) 中。
run: |
$devenv = & vswhere.exe '-property' productPath
Start-Process -FilePath $devenv -ArgumentList '$env.SOLUTION_FILE_PATH /Upgrade' -Wait
【讨论】:
这个解决方案真的适合你吗?对我来说,我认为该步骤在异步 devenv 进程完成更新解决方案之前退出。【参考方案2】:感谢@riQQ 的部分回答,我目前有以下内容,它等待使用this answer 中建议的Out-Null
管道完成输出,并等待生成的文件出现。请注意,我使用的是 project 的路径,而不是 solution。 (我无法让解决方案升级正常工作,尽管我从未弄清楚原因。)
run: |
$devenv = & vswhere.exe '-property' productPath
Write-Output "$devenv"
& $devenv "$env.VCPROJ_FILE_PATH" /Upgrade /NoSplash | Out-Null
Write-Output "devenv launched"
while (!(Test-Path "$env.VCXPROJ_FILE_PATH")) Start-Sleep -Seconds 10
Write-Output "vcxproj found"
while (!(Test-Path "$env.VCXPROJ_FILTERS_FILE_PATH")) Start-Sleep -Seconds 10
Write-Output "vcxproj.filters found"
Start-Sleep -Seconds 10
Write-Output "done."
由于某种原因,当作为 GitHub Action 的一部分运行时,此步骤需要 5 分钟以上才能完成。在我的本地机器上只需要几秒钟。由于讨厌的文件轮询,我不认为这是一个理想的解决方案,但我将其发布在这里以供参考。
【讨论】:
缓慢的devenv.exe
可能是由于这个 GitHub 操作问题:github.com/actions/virtual-environments/issues/128以上是关于如何从 GitHub 操作中升级 Visual Studio 项目?的主要内容,如果未能解决你的问题,请参考以下文章
从 Visual Studio 2017 社区升级到 Pro
如何使用 Visual Studio 2010 将项目从 .Net 2.0 升级到 .Net 4.0?
Visual Studio 升级了我的数据库,现在如何将其转换回来。