web-dev-qa-db-fra.com

moyen fiable pour trouver l'emplacement devenv.exe de Visual Studio 2017

J'ai besoin d'exécuter des scripts qui construisent des solutions Visual Studio en utilisant devenv.exe (ou devenv.com d'ailleurs). Pour visual studio 2015, il y avait une variable d'environnement %VS140COMNTOOLS% que je pouvais utiliser pour trouver l'emplacement d'installation de devenv. Comme il n'y a pas de %VS150COMNTOOLS% pour Visual Studio 2017 , quel serait un moyen fiable de trouver l'emplacement d'installation de devenv dans un script (bat ou powershell).

12
bitbonk

Vous pouvez utiliser vswhere.exe ou powershell pour rechercher vos instances Visual Studio:

for /r "usebackq tokens=1* delims=: " %%i in (`vswhere.exe -latest -requires Microsoft.VisualStudio.Workload.NativeDesktop`) do (
    if /i "%%i"=="installationPath" set dir=%%j
)

et

Install-Module VSSetup -Scope CurrentUser
Get-VSSetupInstance | Select-VSSetupInstance -Latest -Require Microsoft.VisualStudio.Component.VC.Tools.x86.x64

Le chemin vers des charges de travail spécifiques peut également être trouvé via cette API.

https://blogs.msdn.Microsoft.com/vcblog/2017/03/06/finding-the-visual-c-compiler-tools-in-visual-studio-2017/

9
jessehouwing

Une solution consiste à utiliser Power Shell et vswhere.exe. Mais je suis un peu paresseux pour installer de nouveaux outils et ...

J'essayais de trouver une solution plus simple et je l'ai trouvée dans le registre. Il existe une clé de registre HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7, qui répertorie toutes les installations de Visual studio.

Une des limitations mentionnées dans ce lien: https://developercommunity.visualstudio.com/content/problem/2813/cant-find-registry-entries-for-visual-studio-2017.html

S'il y a plus d'une édition de 2017 installée, il semble que le dernier installé aura son chemin dans cette clé.

Mais généralement, vous n'installez qu'un seul studio visuel à des fins de construction ou d'utilisation.

De plus, j’ai codé cet exemple du point de vue de la machine 64 bits. Je pense que Wow6432Node n’existe pas sur les machines 32 bits, mais vraiment - combien de développeurs utilisent des machines 32 bits de nos jours?

Donc, si les limitations ci-dessus vous conviennent, voici un lot pouvant interroger le chemin d'installation de visual studio:

test.bat :

@echo off
setlocal 
call:vs%1 2>nul
if "%n%" == "" (
    echo Visual studio is not supported.
    exit /b
)
for /f "tokens=1,2*" %%a in ('reg query "HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" /v "%n%.0" 2^>nul') do set "VSPATH=%%c"
if "%VSPATH%" == "" (
    echo Visual studio %1 is not installed on this machine
    exit /b
)

echo Visual studio %1 path is "%VSPATH%"
endlocal & exit /b

:vs2017
    set /a "n=%n%+1"
:vs2015
    set /a "n=%n%+2"
:vs2013
    set /a "n=%n%+1"
:vs2012
    set /a "n=%n%+1"
:vs2010
    set /a "n=%n%+10"
    exit /b

Peut être exécuté comme ceci:

>test 2010
Visual studio 2010 path is "C:\Program Files (x86)\Microsoft Visual Studio 10.0\"

>test 2012
Visual studio 2012 path is "C:\Program Files (x86)\Microsoft Visual Studio 11.0\"

>test 2013
Visual studio 2013 path is "C:\Program Files (x86)\Microsoft Visual Studio 12.0\"

>test 2014
Visual studio is not supported.

>test 2015
Visual studio 2015 path is "C:\Program Files (x86)\Microsoft Visual Studio 14.0\"

>test 2017
Visual studio 2017 path is "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\"
10
TarmoPikaro

Voici une fonction PowerShell qui peut être utilisée pour obtenir le chemin d'accès DevEnv.exe. Vous pouvez également le modifier facilement pour rechercher d'autres composants communs, tels que MsBuild.exe ou TF.exe, simplement en modifiant la chaîne DevEnv.exe codée en dur utilisée dans le -Filter.

function Get-DevEnvExecutableFilePath
{
    [bool] $vsSetupExists = $null -ne (Get-Command Get-VSSetupInstance -ErrorAction SilentlyContinue)
    if (!$vsSetupExists)
    {
        Write-Verbose "Importing the VSSetup module..."
        Install-Module VSSetup -Scope CurrentUser -Force
    }
    [string] $visualStudioInstallationPath = (Get-VSSetupInstance | Select-VSSetupInstance -Latest -Require Microsoft.Component.MSBuild).InstallationPath

    $devEnvExecutableFilePath = (Get-ChildItem $visualStudioInstallationPath -Recurse -Filter "DevEnv.exe" | Select-Object -First 1).FullName
    return $devEnvExecutableFilePath
}
0
deadlydog