Visual studio 如何从GitHub操作中升级Visual Studio项目?

Visual studio 如何从GitHub操作中升级Visual Studio项目?,visual-studio,github-actions,Visual Studio,Github Actions,可以使用devenv.exe命令从命令行升级Visual Studio项目,如下所示: devenv.exe SOLUTION_PATH /Upgrade 其中,SOLUTION_PATH是指向Visual Studio解决方案(或项目)文件的路径 作为GitHub操作的一部分,执行此步骤最直接的方法是什么 我尝试过的 到目前为止,我还没有找到将devenv.exe放入GitHub操作路径的方法。此操作似乎没有预生成的操作步骤(setup msbuild步骤无法使devenv可用)。甚至对

可以使用
devenv.exe
命令从命令行升级Visual Studio项目,如下所示:

  devenv.exe SOLUTION_PATH /Upgrade
其中,SOLUTION_PATH是指向Visual Studio解决方案(或项目)文件的路径

作为GitHub操作的一部分,执行此步骤最直接的方法是什么

我尝试过的

到目前为止,我还没有找到将
devenv.exe
放入GitHub操作路径的方法。此操作似乎没有预生成的操作步骤(
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
失败,因为路径包含空格,并且我找不到添加引号的方法


但我知道这需要编写一个PowerShell脚本,并且可能需要对其进行签名,我不知道这在GitHub操作中是否有效。也许有一种更简单的方法,因此我的问题是:升级解决方案最直接的方法是什么?

您需要一个基于Windows的运行程序
vswhere
是获取Visual Studio安装的各个组件的路径的工具,其文件夹位于路径()中


感谢@riQQ的部分回答,我目前有以下内容,它等待使用中建议的管道to
Out Null
完成输出,并等待生成的文件出现。请注意,我使用的是指向项目的路径,而不是指向解决方案的路径。(我无法让解决方案升级正常工作,尽管我从未找出原因。)


由于某些原因,当作为GitHub操作的一部分运行时,完成此步骤需要5分钟以上。在我的本地机器上只需要几秒钟。由于讨厌的文件轮询,我不认为这是一个理想的解决方案,但我在这里发布以供参考。

这个代码>升级>代码>实际上是什么?@ KrZysZtoMaDeJ它将项目文件版本从.vcProjJ升级到vcxProj:这个解决方案真的对你有用吗?对我来说,我认为该步骤在异步devenv进程完成解决方案更新之前退出。缓慢的
devenv.exe
可能是由于此GitHub操作问题:
run: |
  $devenv = & vswhere.exe '-property' productPath
  Start-Process -FilePath $devenv -ArgumentList '${{env.SOLUTION_FILE_PATH}} /Upgrade' -Wait
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."