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

Tob*_*obi 50 debugging environment-variables visual-studio

在类库项目中,我将项目属性的"调试"选项卡上的"启动操作"设置为"启动外部程序"(在本例中为NUnit).我想在这个程序启动的环境中设置一个环境变量.我该怎么做?(它甚至可能吗?)

编辑:

它是一个影响所有.NET应用程序的环境变量(COMplus_Version,它设置运行时版本),因此在系统范围内设置它实际上不是一个选项.

作为一种解决方法,我只是强迫NUnit通过设置它来启动正确的.NET版本(2.0)nunit.exe.config,但不幸的是,这也意味着我的所有.NET 1.1单元测试现在也在.NET 2.0中运行.我应该只是制作可执行文件的副本,以便它可以拥有自己的配置文件......

(我保持问题公开(不接受答案)万一有人确实发现了怎么样(毕竟它可能对其他目的有用......))

Joh*_*ing 70

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

打开你的项目.转到项目 - >属性...在配置属性 - >调试下,编辑'环境'值以设置环境变量.

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

这是设置对话框的屏幕截图

  • 这是C/C++项目的属性.我猜你使用的是C#或VB.NET (8认同)
  • 在VS2017中没有任何类似的东西 (6认同)

Wou*_*rck 25

在 Visual Studio 2019 中右键单击您的项目,选择Properties. 在项目属性窗口中,选择 选项Debug卡。然后,将Environment variables您的环境的值从 更改为DevelopmentProduction其他环境。对于 .Net Core 和 .Net 5,该属性称为ASPNETCORE_ENVIRONMENT

在此输入图像描述

  • 很确定这个_仅_适用于“.Net Core|5+”,因为我的“调试”选项卡根本没有“环境变量”的东西。或者也许是控制台应用程序与网站|WebAPI 的问题? (11认同)
  • @WouterVanherck 是的,但是 OP(14 年前)询问了 .NET Framework 项目或解决方案,.NET Core | 5+ 还不存在。这将影响答案。 (4认同)
  • @ScottFraley 该示例是通过 ASP .NET Core 5 项目进行的 (2认同)

小智 8

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

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

但是您需要以下命名空间

using System.Collections;
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这解释了如何从代码全局设置环境变量。该问题明确提到这是不可取的。 (2认同)

小智 8

在 VS 2022 for .NET 5 和 6 中,您可以在项目属性下设置环境变量 -> 调试 -> 在常规下单击“打开调试启动配置文件 UI”并向下滚动到“环境变量”

在此输入图像描述


小智 6

Visual Studio 2003似乎不允许您为调试设置环境变量.

我在C/C++做的是使用_putenv()main()和设置任何变量.通常我用a包围它以#if defined DEBUG_MODE / #endif确保只有某些版本拥有它.

_putenv("MYANSWER=42");
Run Code Online (Sandbox Code Playgroud)

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

os.putenv('MYANSWER', '42');
Run Code Online (Sandbox Code Playgroud)

这些将仅为该shell进程设置envrironment变量,因此是一个短暂的设置,这正是您正在寻找的.

顺便说一句,它是一个很好用的进程资源管理器(http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx),这是一个sysinternals工具.您可以看到给定进程的环境变量副本是什么,因此您可以验证您设置的是您所获得的内容.