2009-06-24 9 views
7

¿Tiene VS una variable de entorno para la ruta a la solución actual?Visual Studio Solution Variable de entorno de ruta

Por ejemplo, existe "% PathToWebRoot%" que generalmente se establece en el directorio "Sitios web" en el directorio de proyectos de VS. El valor de esto se puede cambiar de muchas maneras. Me pregunto si hay una variable que cambie cada vez que cargue una solución para apuntar a su raíz.

Estoy creando pruebas unitarias que potencialmente se ejecutarán en diferentes máquinas y una de las instrucciones que debe establecer antes de que el método sea AspNetDevelopmentServerHost. Se recomienda no codificarlos de forma rígida, por supuesto, pero la variable de entorno recomendada no es necesariamente la ubicación de su sitio y no lo es en este caso.

Respuesta

13

VS tiene una gran cantidad de variables macro que trabajan desde dentro VS. El que le da el camino completo a la solución se llama $(SolutionDir). Sin embargo, aunque esto funciona desde los eventos de compilación previa y posterior (y, AFAIK, en el archivo MSBuild de la solución), esta no es una variable de entorno. Si lo piensas, no puedes tener una variable de entorno (global) que apunte a "la ruta a la solución actual", ya que puedes tener abierta más de una instancia de VS.

Dependiendo del marco de prueba de su unidad, a menudo puede preguntar sobre su contexto de ejecución para obtener el directorio actual. Eso no le puede dar la ruta de solución, aunque ...

+0

Es cierto, incluso si la instancia actual de VS cambiado para que coincida con su configuración, que podría arruinar cualquier otra instancia. Voy a probar $ (SolutionPath), las pruebas unitarias se ejecutan desde dentro de VS para que pueda ser lo que necesito. – Otis

+0

Funcionó como un amuleto, gracias. ¿No cree que sabe si hay uno para descubrir el puerto actual del servidor de desarrollo? – Otis

+0

La forma en que generalmente descubro los nombres de estas macros es abriendo las Propiedades del proyecto y yendo a la pestaña Eventos de compilación. Si hace esto y hace clic en cualquiera de los botones Editar, obtendrá un diálogo con (entre otras cosas) un botón Macros. Al hacer clic en este botón, obtendrá una lista de todas las variables macro disponibles para su proyecto.No tengo un proyecto web a mano, así que no puedo buscarlo, pero ciertamente no hay ningún número de puerto en la Biblioteca de clases que estoy inspeccionando ... –

5

Visual Studio sí expone una variable de entorno para la trayectoria de la solución - que se llama SolutionPath. Se ve así:

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

Es importante destacar que se puede usar en cualquier proceso generado a partir de Visual Studio - por ejemplo, el lanzamiento de secuencias de comandos por lotes de su solución (que es la forma en que puede ser diferente en las diferentes instancias de Visual Studio)

Si configura Visual Studio para iniciar archivos .bat haciendo doble clic en ellos siguiendo this guide, la variable de entorno estará disponible en su archivo por lotes.

En mi caso particular, necesitaba acceder a un directorio dentro de mi solución y tenía algunas ramas de código en el mismo nivel. Pero mi script por lotes estaba en un nivel superior en el árbol fuente y no tenía una forma fácil de determinar la rama 'actual'. Por ejemplo, este fue mi estructura:

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

que hace referencia MyBatchScript.bat como un elemento de solución en cada solución por lo que podría poner en marcha haciendo doble clic sobre él.

Para obtener la carpeta de la solución en lugar de la ruta de acceso al archivo de solución, he usado un poco de DOS magia script por lotes:

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