2009-06-24 7 views
7

Est-ce que VS ont une variable d'environnement pour le chemin de la solution actuelle?Solution Visual Studio variable d'environnement Path

Par exemple, il est « % PathToWebRoot% » qui est généralement défini sur le répertoire « Websites » dans votre répertoire de projet VS. La valeur de celui-ci peut être modifiée de plusieurs façons. Je me demande s'il y a une variable qui change chaque fois que vous chargez une solution pour qu'elle pointe vers sa racine.

Je crée des tests unitaires qui pourraient être exécutés sur des machines différentes et l'une des directions, vous devez définir avant que la méthode est la AspNetDevelopmentServerHost. Il est recommandé de ne pas les coder en dur, bien sûr, mais la variable d'environnement recommandée n'est pas nécessairement là où votre site sera et ne l'est pas dans ce cas.

Répondre

13

VS a beaucoup de variables de macro qui fonctionnent de au sein de VS. Celui qui vous donne le chemin complet de la solution s'appelle $(SolutionDir). Cependant, bien que cela fonctionne à partir des événements de pré- et post-construction (et, AFAIK, dans le fichier MSBuild de la solution), ce n'est pas une variable d'environnement. Si vous y réfléchissez, vous ne pouvez pas avoir une variable d'environnement (globale) qui pointe vers "le chemin vers la solution actuelle", car vous pouvez avoir plusieurs instances de VS ouvertes.

En fonction de votre cadre de tests unitaires, vous pouvez demander souvent de son contexte d'exécution pour obtenir le répertoire courant. Cela peut ne pas vous donner le chemin de solution, cependant ...

+0

est vrai, même si l'instance actuelle de VS a changé pour le match est paramètres, qui bousilleraient toute autre instance. Je vais essayer $ (SolutionPath), les tests unitaires s'exécutent à partir de VS, ce qui peut être ce dont j'ai besoin. – Otis

+0

A travaillé comme un charme, merci. Ne supposez pas que vous savez s'il y en a un pour comprendre le port actuel du serveur de développement? – Otis

+0

La façon dont je trouve habituellement les noms de ces macros est en ouvrant des propriétés du projet et aller à l'onglet Événements de génération. Si vous faites cela et cliquez sur l'un des boutons Modifier, vous obtiendrez une boîte de dialogue avec (entre autres) un bouton Macros. Cliquer sur ce bouton vous donnera une liste de toutes les variables de macros disponibles pour votre projet.Je n'ai pas de projet web à portée de main, donc je ne peux pas le rechercher pour vous, mais il n'y a certainement pas de numéro de port dans la bibliothèque que je suis en train d'inspecter ... –

5

Visual Studio expose une variable d'environnement pour le chemin d'accès de solution - il s'appelle SolutionPath. Il ressemble à ceci:

SolutionPath=D:\Team\MyProject\main-branch\MyProject.sln

Il est important, vous pouvez l'utiliser dans un processus donné naissance à partir de Visual Studio - par exemple, le lancement des scripts batch de votre solution (c'est la façon dont il peut être différent dans les différentes instances de Visual Studio).

Si vous configurez Visual Studio pour lancer les fichiers .bat en double-cliquant dessus en suivant this guide, la variable d'environnement sera disponible dans votre fichier de commandes.

Dans mon cas particulier, je devais arriver à un répertoire dans ma solution et j'avais quelques branches de code tout au même niveau. Mais mon script de lot était à un niveau supérieur dans l'arborescence des sources et il n'avait pas de moyen facile de déterminer la branche 'actuelle'. Par exemple, ce fut ma structure:

D:\Team\MyProject\ 
    L-- Build 
     L-- MyBatchScript.bat 
    L-- main-branch 
     |-- MyProject.sln 
     L-- important-folder 
    L-- dev-branch 
     |-- MyProject.sln 
     L-- important-folder 

Je MyBatchScript.bat référencé comme un élément de solution dans chaque solution pour que je puisse le lancer en double-cliquant dessus.

Pour obtenir le dossier de la solution plutôt que le chemin vers le fichier de solution, j'ai utilisé un peu de magie de script batch DOS:

FOR %%d IN (%SolutionPath%) DO SET SolutionFolder=%%~dpd 
REM Now I can run a tool with the correct folder 
mycustomtool.exe %SolutionFolder%important-folder 
Questions connexes