如何在Visual Studio调试时设置特定的环境变量?

95
在一个类库项目中,我将项目属性的Debug选项卡上的“启动操作”设置为“启动外部程序”(在这种情况下是NUnit)。我想在启动此程序的环境中设置一个环境变量。我该如何做?(是否可能?)
编辑:
这是影响所有.NET应用程序的环境变量(COMplus_Version,它设置运行时版本),因此在系统范围内设置它真的不是一个选项。
作为解决方法,我只是强制NUnit在正确的.NET版本(2.0)中启动,通过在nunit.exe.config中进行设置,尽管不幸的是,这也意味着我所有的.NET 1.1单元测试现在也在.NET 2.0中运行。我应该只是复制可执行文件,这样它就可以拥有自己的配置文件...
(我保持问题处于打开状态(不接受答案),以防万一某人确实找到了方法(毕竟这可能还有其他用途...)。)

你是否想要一个仅针对这个程序的环境变量? - Mark Ingram
13个回答

102

在至少 Visual Studio 2005 和 Visual Studio 2008 中,你可以在项目设置中指定环境变量的更改。

打开你的项目。进入“项目”->“属性”... 在“配置属性”->“调试”下,编辑“环境”值以设置环境变量。

例如,如果您要在调试应用程序时将目录“c:\foo\bin”添加到路径中,请将“环境”值设置为“PATH=%PATH%;c:\foo\bin”。

这是设置对话框的截图


1
我正在使用VS2008,但我的项目属性中没有“配置属性”或“调试”选项。我无法在项目属性下找到任何关于环境变量的信息。我做错了什么? - Stewart Johnson
14
这是用于C/C++项目的属性。我猜你在使用C#或VB.NET。 - Juozas Kontvainis
有一个错误禁止添加多个变量。请参考以下解决方法:https://connect.microsoft.com/VisualStudio/feedback/details/739477/visual-c-2010-set-multiple-variables-for-project-debug-environment - Alex
19
在VS2017中没有任何类似的东西。 - dudeNumber4
请注意不要在任何符号(如=或;)之前或之后留有任何空格!!!! 我花了2个小时才找到它。 - Dimitrios Ververidis
显示剩余6条评论

25

在 Visual Studio 2019 中右键单击您的项目,选择 属性。在项目属性窗口中,选择 调试 选项卡。然后,在 环境变量 下将您的环境值从 Development 更改为 Production 或其他环境。对于 .Net Core 和 .Net 5,该属性称为 ASPNETCORE_ENVIRONMENT

进入图像描述本处


11
很确定这个功能只适用于.Net Core|5+,因为我的Debug选项卡上根本没有那些“环境变量”相关的东西。或者这是控制台应用程序与网站/ WebAPI之间的区别? - Scott Fraley
2
@ScottFraley 这个例子是通过一个 ASP .NET Core 5 项目实现的。 - Wouter Vanherck
4
@WouterVanherck 是的,但是OP(14年前)当时询问的是.NET Framework项目或解决方案,.NET Core | 5+还不存在。这将会影响答案。 - Kris Bunda

17
在 Visual Studio for Mac 和 C# 中,您可以使用以下代码:
Environment.SetEnvironmentVariable("<Variable_name>", "<Value>");

但是您将需要以下命名空间

using System.Collections;

你可以用这个来查看所有变量的完整列表:
foreach (DictionaryEntry de in Environment.GetEnvironmentVariables())
{
    Console.WriteLine("  {0} = {1}", de.Key, de.Value);
}

哎呀,我已经搜索了半个小时才找到那个简单的调用Environment.SetEnvironmentVariable()。谢谢! - Alan
1
这里解释了如何从代码中全局设置环境变量。问题明确指出这是不可取的。 - Oliver Salzburg
嘿,我很想试试这个!有人可以告诉我如何设置它或者我需要把它放在哪里吗? - minh anh b

9

在调试过程中,Visual Studio 2003好像不允许您设置环境变量。

在C/C++中,我会在main()中使用_putenv()来设置任何变量。通常我会用#if defined DEBUG_MODE / #endif将其包围起来,以确保只有某些构建才具有它。

_putenv("MYANSWER=42");

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

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

这些命令只会在当前shell进程中设置环境变量,因此是一种短暂的设置,正是您所需要的。
顺便提一下,使用进程资源管理器(http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)是一个好习惯,这是一个sysinternals工具。您可以查看给定进程的环境变量副本,以便验证您设置的内容是否正确。

7
在 VS 2022 中,针对 .NET 5 和 6,您可以在项目的属性下设置环境变量 -> 调试 -> 在“常规”下单击“打开调试启动配置 UI”,然后向下滚动到“环境变量”。

enter image description here


2
从 NUnit 2.5 开始,您可以使用 /framework 开关,例如:
nunit-console myassembly.dll /framework:net-1.1

这是来自NUnit的帮助页面

1
如果您正在使用VS 2019,在“项目” -> “属性” -> “调试”下进行设置。点击此处查看截图 为变量添加键和值。然后就完成了。在属性文件夹中检查launchSettings.json,您应该能看到您的变量。

0

我更喜欢将所有这些定义保存在make文件中,即在.*proj.props中 - 因为这些文件都在版本控制下。 我避免使用VS-Gui-Property-Dialogs。你在那里编写的大量配置将进入一些.user.suo之类的文件中,这些文件通常不在版本控制下。
例如,在环境变量的情况下,您可以在.vcxproj中使用文本编辑器编写以下内容:

<PropertyGroup>
  <LocalDebuggerEnvironment Condition="'$(Configuration)'=='Debug'">
ANSWER=42
RUNTIME_DIR="$(g_runtime_dir)"
COLOR=octarin
  </LocalDebuggerEnvironment>
</PropertyGroup>

请注意,您可以使用MSBuild条件和其他构建属性来定义环境变量。

注意:这对我来说适用于VS2013和VS2019。我认为其他VS + MSBuild版本也是一样的。


0

设置一个批处理文件,您可以调用它。传递批处理文件的路径,然后让批处理文件设置环境变量并调用 NUnit。


5
Visual Studio 只接受可执行文件(.exe)作为程序启动路径,不接受其他任何类型的文件。 - Tobi

0

由于环境是从父进程继承的,您可以编写一个 Visual Studio 插件,在执行启动之前修改其环境变量。我不确定将其放入您的流程中会有多么容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接