Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

CoqBlog

.NET is good :-)
{ Blog de Gaël Covain }

Actualités

PowerShell & Visual Studio Command Prompt : plusieurs solutions, dont une très simple (ok, pour paresseux)

Comme vous le savez, lancer depuis un prompt PowerShell le bat "vcvarsall.bat" correspondant aux raccourcis "Visual Studio 2005 Command Prompt" ou "Visual Studio 2008 Command Prompt" ne suffit pas à disposer de l'environnement souhaité dans ce prompt PS.
En effet, ce bat ne fait basiquement que lancer d'autres bat (vcvars32.bat, vcvarsamd64.bat, vcvarsia64.bat, vcvarsx86_amd64.bat ou vcvarsx86_ia64.bat suivant la config choisie), dont le but est simplement d'enrichir les variables d'environnement nécessaires (du moins c'est le cas pour vcvars32.bat).

Seulement, ces affectations ne survivent pas en dehors de l'execution du bat, elles n'impactent pas celles définies dans PowerShell.

Il y a donc plusieurs solutions au problème :

  1. La première est de redévelopper ces fameux bat en script PowerShell qui vont se charger d'enrichir directement les variables env:*, comme l'a fait Brad Wilson avec son script vsvars2008.ps1 qu'il a eu la gentillesse de partager avec nous.
  2. La seconde est tout simplement de continuer à utiliser les bat existants, qui doivent probablement être générés durant le setup de Visual Studio, et en recopiant les valeurs des variables d'environnement en fin d'execution dans notre session PowerShell :-)

 

Détaillons cette seconde solution, je sens qu'elle vous intéresse.

Le raccourci "Visual Studio 2005 Command Prompt" ne consiste qu'en ceci :
%comspec% /k ""C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat"" x86

Or, cmd.exe peut prendre plusieurs commandes, en les séparant par &&, ce qui vas nous permettre d'executer set afin d'obtenir la liste des variables d'environnement définies dans le contexte de l'exection de cmd.
Ensuite, il ne nous reste qu'à parser ces informations pour définir ces mêmes variables dans notre prompt PowerShell.
Pour Visual Studio 2005 en x86, ça donne ceci :

cmd.exe /c "`"C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat`" x86&&set" |
foreach {
    if($_ -match "^(.*?)=(.*)$")
    {
        Set-Content "env:\$($matches[1])" $matches[2]
    }
}

La seule chose changeant pour VS2008 étant le chemin d'accès au fichier vcvarsall.bat :

cmd.exe /c "`"C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat`" x86&&set" |
foreach {
    if($_ -match "^(.*?)=(.*)$")
    {
        Set-Content "env:\$($matches[1])" $matches[2]
    }
}

Maintenant, concernant le fait d'ajouter ça au profil du shell PowerShell, pourquoi pas, si vous êtes sûr de ne plus vouloir utiliser que la dernière version de outils.

Personnellement, j'ai préférer garder 2 fichiers séparés vcvarsall_vs2005.ps1 et vcvarsall_vs2008.ps1 que je fais executer par 2 raccourcis qui vont bien, clonés du raccourci PS par défaut :

Visual Studio 2005 PowerShell Prompt : %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -NoExit &(Join-Path (Split-Path $PROFILE) 'Dev\vcvarsall_vs2005.ps1')
Visual Studio 2008 PowerShell Prompt : %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -NoExit &(Join-Path (Split-Path $PROFILE) 'Dev\vcvarsall_vs2008.ps1')

Mes deux fichiers ps1 sont placés dans un répertoire Dev placé dans le répertoire de mon profil PS, d'où la forme Join-Path (Split-Path $PROFILE) 'Dev\fichier.ps1' du raccourci.
D'ailleurs si vous voulez éviter les fichiers ps1, vous pouvez très bien "one-liné" leur contenu et vous en servir avec le paramètre -Command, mais bon courage ;-)

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: samedi 15 décembre 2007 00:17 par coq
Classé sous :

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Un outil pour réaliser des animations WPF basées sur des équations de Bézier par Perspective le il y a 2 heures et 47 minutes

- Sandcastle et CodePlex : le verdict par CoqBlog le il y a 3 heures et 38 minutes

- Webcasts sur le Parallel Framework disponibles par Matthieu MEZIL le il y a 7 heures et 6 minutes

- [Silverlight] - Comprendre et Débuter avec Silverlight par Danuz le il y a 11 heures et 51 minutes

- SharePoint : Nouvel article sur l'exportation et Importation de sites SharePoint par Blog Technique de Romelard Fabrice le il y a 23 heures et 32 minutes

- ImagineCup 2008 Final in Paris: Day 1 par Richard Clark le 07-03-2008, 22:48

- PowerShell : Comment utiliser un ENUM .NET dans un script PowerShell par Blog Technique de Romelard Fabrice le 07-03-2008, 18:09

- OU SONT LES VISITEURS DE MON SITE ? par Nix's Blog le 07-03-2008, 15:07

- PowerShell : Quelques outils de développement adaptés par Blog Technique de Romelard Fabrice le 07-03-2008, 14:50

- [DevWeb] "FireFox est lent quand je developpe en local ?" par The diary of EBArtSoft le 07-03-2008, 14:47