在Visual Studio中debugging时如何设置特定的环境variables?

在类库项目中,我将项目属性的“debugging”选项卡上的“启动操作”设置为“启动外部程序”(在本例中为NUnit )。 我想在这个程序启动的环境中设置一个环境variables。我该怎么做? (这甚至有可能吗?)

编辑:

这是一个影响所有.NET应用程序(COMplus_Version,它设置运行时版本)的环境variables,所以将它设置为系统范围真的不是一个选项。

作为一个解决方法,我只是强迫NUnit在.NET版本(2.0)中nunit.exe.config ,通过在nunit.exe.config设置它,但不幸的是这也意味着我所有的.NET 1.1unit testing现在也运行在.NET 2.0中。 我应该只是做一个可执行文件的副本,以便它可以有自己的configuration文件…

(我保持这个问题是开放的(不接受答案),以防有人发现如何(毕竟这可能对其他目的有用))

至less在Visual Studio 2008和Visual Studio 2005中,您可以在项目设置中指定对环境variables的更改。

打开你的项目。 转到项目 – >属性…在configuration属性 – >debugging,编​​辑'环境'值来设置环境variables。

例如,如果要在debugging应用程序时将path“c:\ foo \ bin”添加到path中,请将“环境”值设置为“PATH =%PATH%; c:\ foo \ bin”。

以下是设置对话框的屏幕截图:

[2]:http://en.wikipedia.org/wiki/Microsoft_Visual_Studio#Visual_Studio_2008

Visual Studio 2003似乎不允许您设置用于debugging的环境variables。

我在C / C ++中做的是在main()使用_putenv() main()并设置任何variables。 通常我用#if defined DEBUG_MODE / #endif来包围它,以确保只有特定的版本有它。

 _putenv("MYANSWER=42"); 

我相信你可以用C#使用os.putenv()做同样的事情,即

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

这些将只为shell进程设置envrironmentvariables,因此这是一个短暂的设置,这正是你正在寻找的。

顺便说一句,它是一个sysinternals工具使用进程资源pipe理器( http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx )很好。 你可以看到给定进程的环境variables副本是什么,所以你可以validation你设置的是什么。

如果您不能使用bat文件来设置您的环境,那么您唯一可能的select是设置一个系统范围的环境variables。 你可以通过这样做来find这些

  1. 右键单击“我的电脑”
  2. select属性
  3. select“高级”选项卡
  4. 点击“环境variables”button
  5. 在“系统variables”部分中,添加您所需的新环境variables
  6. “确定”完成接受您的更改

我不知道你是否必须重新启动visual studio,但似乎不太可能。 HTH

从NUnit 2.5开始,你可以使用/ framework开关,例如:

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

这是来自NUnit的帮助页面 。

设置一个可以调用的batch file。 传递batch file的path,并让batch file设置环境variables,然后调用NUnit。

由于环境是从父进程inheritance的,因此可以在执行启动之前为Visual Studio编写一个加载项,用于修改其环境variables。 我不确定在你的过程中有多容易。

在Visual Studio for Mac和C#中,您可以使用:

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

但是你将需要下面的命名空间

 using System.Collections; 

你可以用这个检查variables的完整列表:

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