2008-09-19 17 views
38

En un proyecto de biblioteca de clase, establecí la "Acción de inicio" en la pestaña Depuración de las propiedades del proyecto en "Iniciar programa externo" (NUnit en este caso). Quiero establecer una variable de entorno en el entorno en el que se inicia este programa. ¿Cómo hago eso? (¿Es posible?)¿Cómo configuro variables de entorno específicas al depurar en Visual Studio?

EDIT:

Es una variable de entorno que influye en todas las aplicaciones .NET (COMplus_Version, establece la versión de tiempo de ejecución) de modo que la configuración de todo el sistema realmente no es una opción.

Como solución temporal, obligué a NUnit a iniciarse en la versión .NET (2.0) configurando el nunit.exe.config, aunque desafortunadamente esto también significa que todas mis pruebas de unidad .NET 1.1 ahora también se ejecutan en .NET 2.0. Probablemente debería simplemente hacer una copia del archivo ejecutable para que pueda tener su propio archivo de configuración ...

(mantengo la pregunta abierta (no aceptando una respuesta) en caso de que alguien descubra cómo (podría ser útil para otros fines también después de todo ...))

+0

¿Desea una variable de entorno específicamente para este progr estoy solo? –

Respuesta

59

En Visual Studio     2008 y Visual Studio     2005, al menos, puede especificar los cambios en las variables de entorno en la configuración del proyecto.

Abra su proyecto. Vaya a Proyecto -> Propiedades ... En Propiedades de configuración -> Depuración, edite el valor 'Entorno' para establecer variables de entorno.

Por ejemplo, si desea agregar el directorio "c: \ foo \ bin" a la ruta al depurar su aplicación, establezca el valor 'Entorno' en "RUTA =% RUTA%; c: \ foo \ bin ".

Here's a screenshot of the settings dialog

+0

Estoy usando VS2008, y las propiedades de mi proyecto no tienen "Propiedades de configuración" o "Depuración" en él. No puedo encontrar nada sobre variables de entorno en ninguna parte bajo las propiedades del proyecto. ¿Qué estoy haciendo mal? –

+0

Editaré esta publicación con una captura de pantalla de dónde están las configuraciones. –

+0

Hola, ¿cómo llegaste a esta pantalla? En mi VS2008 y VS2005, las propiedades del proyecto parecen ser diferentes, y no tienen la configuración del entorno – Grzenio

0

Configure un archivo por lotes que pueda invocar. Pase la ruta del archivo por lotes y haga que el archivo por lotes establezca la variable de entorno y luego invoque NUnit.

+4

Visual Studio se niega a aceptar nada más que archivos ejecutables (.exe) en la ruta para que se inicie el programa. – Tobi

1

Si no puede usar los archivos bat para configurar su entorno, entonces su única opción probable es configurar una variable de entorno de todo el sistema. Usted puede encontrar estos haciendo

  1. Haga clic derecho en "Mi PC"
  2. Seleccione propiedades
  3. Seleccione la pestaña "Avanzado"
  4. Haga clic en las "variables de entorno" botón
  5. En las "variables del sistema "sección, agregue la nueva variable de entorno que desee
  6. " Ok "hasta el final para aceptar sus cambios

No sé si tendrías que reiniciar Visual Studio, pero parece improbable. HTH

+0

Mark, creo que el requisito era para el entorno en el que se inició el programa, no para el usuario o los entornos del sistema. –

+0

Sí, es una variable de entorno que influye en todas las aplicaciones .NET (COMplus_Version, establece la versión en tiempo de ejecución) por lo que configurarlo en todo el sistema realmente no es una opción. – Tobi

+0

Sí, lo perdí. Lo siento. – Mark

0

medida que los entornos se heredan del proceso padre, se podría escribir un add-in para Visual Studio que modifica sus variables de entorno antes de realizar el principio. No estoy seguro de lo fácil que sería ponerlo en su proceso.

4

Visual Studio 2003 no parece permitirle establecer variables de entorno para la depuración.

Lo que hago en C/C++ es usar _putenv() en main() y establecer las variables. Por lo general, lo rodeo con un #if defined DEBUG_MODE/#endif para asegurarme de que solo algunas compilaciones lo tienen.

_putenv("MYANSWER=42"); 

Creo que se puede hacer lo mismo con C# usando os.putenv(), es decir

os.putenv('MYANSWER', '42'); 

Estos serán establecer la variable de envrironment sólo para ese proceso de cáscara, y como tal es un efímero entorno, que es lo que estás buscando.

Por cierto, es bueno para usar el explorador de procesos (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx), que es una herramienta sysinternals. Puedes ver la copia de las variables de entorno de un proceso dado, para que puedas validar que lo que configuraste es lo que obtuviste.

1

A partir de NUnit 2.5 se puede utilizar/interruptor marco ej .:

nunit-console myassembly.dll /framework:net-1.1 

Esto es de NUnit's help pages.

2

En Visual Studio para Mac y C# se puede utilizar:

Environment.SetEnvironmentVariable("<Variable_name>", "<Value>");

Pero se necesita el siguiente espacio de nombres

using System.Collections; 

se puede comprobar la lista completa de variables con esto:

foreach (DictionaryEntry de in Environment.GetEnvironmentVariables()) 
      Console.WriteLine(" {0} = {1}", de.Key, de.Value); 
+0

OMG, he estado buscando la última media hora para encontrar esa simple llamada Environment.SetEnvironmentVariable(). ¡Gracias! – Alan

Cuestiones relacionadas