如何从 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 升级了我的数据库,现在如何将其转换回来。

从 Visual Studio 2008 升级到 Visual Studio 2010 速成版

如何让 Visual Studio 自动升级项目?

visual studio 2015怎样升级