在Visual Studio中进行调试时,如何设置特定的环境变量?
在类库项目上,我将项目属性的"调试"选项卡上的"启动操作"设置为"启动外部程序"(在这种情况下为NUnit)。我想在启动该程序的环境中设置一个环境变量。我该怎么做? (有可能吗?)
编辑:
这是一个影响所有.NET应用程序的环境变量(COMplus_Version,它设置运行时版本),因此在系统范围内设置它确实不是一个选择。
作为解决方法,我只是通过在nunit.exe.config
中设置NUnit来强制在正确的.NET版本(2.0)中启动,尽管不幸的是,这也意味着我所有的.NET 1.1单元测试现在也都在.NET 2.0中运行。我可能应该只复制可执行文件,以便它可以拥有自己的配置文件...
(我一直在公开问题(不接受答案),以防万一有人碰巧发现了问题(毕竟这可能对其他目的也有用...))
解决方案
设置一个可以调用的批处理文件。将路径传递给批处理文件,并让批处理文件设置环境变量,然后调用NUnit。
如果我们不能使用bat文件来设置环境,那么唯一可能的选择是设置系统范围的环境变量。我们可以通过以下方式找到这些
- 右键单击"我的电脑"
- 选择属性
- 选择"高级"标签
- 点击"环境变量"按钮
- 在"系统变量"部分中,添加所需的新环境变量
- 一路"确定"接受更改
我不知道我们是否必须重新启动Visual Studio,但似乎不太可能。高温超导
至少在VisualStudio2008和VisualStudio2005中,可以在项目设置中指定对环境变量的更改。
打开项目。转到项目->属性...,在配置属性->调试下,编辑"环境"值以设置环境变量。
例如,如果要在调试应用程序时将目录" c:\ foo \ bin"添加到路径,则将'Environment'值设置为" PATH =%PATH%; c:\ foo \ bin"。
由于环境是从父进程继承而来的,因此可以在执行开始之前为Visual Studio编写一个加载项,以修改其环境变量。我不确定将其放入流程有多么容易。
Visual Studio 2003似乎不允许我们设置环境变量进行调试。
我在C / C ++中所做的是在main()中使用_putenv()
并设置任何变量。通常,我用一个#if定义的DEBUG_MODE / #endif包围它,以确保只有某些内部版本具有它。
_putenv("MYANSWER=42");
我相信我们可以使用os.putenv()来做同样的事情,即
os.putenv('MYANSWER', '42');
这些将仅为该shell进程设置envrironment变量,因此这是一个临时设置,这就是我们要查找的设置。
顺便说一句,它很好地使用了进程浏览器(http://technet.microsoft.com/zh-cn/sysinternals/bb896653.aspx),它是sysinternals工具。我们可以看到给定进程的环境变量副本是什么,因此我们可以验证所设置的就是我们所得到的。