【问题标题】:How do I set specific environment variables when debugging in Visual Studio?在 Visual Studio 中调试时如何设置特定的环境变量?
【发布时间】:2010-09-11 03:52:57
【问题描述】:

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

编辑:

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

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

(我保持问题开放(不接受答案)以防有人碰巧发现如何(毕竟它也可能对其他目的有用......))

【问题讨论】:

  • 你想要一个专门用于这个程序的环境变量吗?

标签: visual-studio debugging environment-variables


【解决方案1】:

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

打开您的项目。转到 Project -> Properties... 在 Configuration Properties -> Debugging 下,编辑“Environment”值以设置环境变量。

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

【讨论】:

  • 我使用的是VS2008,我的项目属性上没有“配置属性”或“调试”。我在项目属性下的任何地方都找不到有关环境变量的任何信息。我做错了什么?
  • 我将编辑这篇文章并附上设置位置的屏幕截图。
  • 嗨,你是怎么进入这个屏幕的?在我的 VS2008 和 VS2005 项目属性中看起来似乎不同,并且它们没有环境设置
  • 这是 C/C++ 项目的属性。我猜你使用的是 C# 或 VB.NET
  • 在 VS2017 中没有类似的东西
【解决方案2】:

在 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()。谢谢!
  • 这解释了如何从代码全局设置环境变量。该问题明确提到这是不可取的。
【解决方案3】:

Visual Studio 2003 似乎不允许您设置环境变量以进行调试。

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

_putenv("MYANSWER=42");

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

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

这些将仅为该 shell 进程设置环境变量,因此是一个临时设置,这正是您要寻找的。​​p>

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 很确定这 only 适用于 .Net Core|5+,因为我的“调试”选项卡根本没有 Environment variables 的东西。或者可能是控制台应用程序与网站|WebAPI 的事情?
    • @ScottFraley 这个例子是通过一个 ASP .NET Core 5 项目
    【解决方案5】:

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

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

    这是来自NUnit's help pages

    【讨论】:

      【解决方案6】:

      您可以在属性 > 配置属性 > 调试 > 环境中进行设置

      【讨论】:

      • 您在发布答案之前是否进行了测试?我猜不会。 -1.
      • 这个答案中唯一的错误是不需要“set”
      【解决方案7】:

      如果您不能使用 bat 文件来设置环境,那么您唯一可能的选择是设置系统范围的环境变量。您可以通过以下方式找到这些

      1. 右键单击“我的电脑”
      2. 选择属性
      3. 选择“高级”标签
      4. 点击“环境变量”按钮
      5. 在“系统变量”部分,添加所需的新环境变量
      6. 一直“确定”以接受您的更改

      我不知道您是否必须重新启动 Visual Studio,但似乎不太可能。高温

      【讨论】:

      • 马克,我认为要求是针对程序启动的环境,而不是用户或系统环境。
      • 是的,它是一个影响所有 .NET 应用程序的环境变量(COMplus_Version,它设置运行时版本),因此在系统范围内设置它确实不是一种选择。
      • 我通过定义用户级环境变量(我的电脑 > 属性 > 高级)来解决问题。启动命令 shell 的新实例并回显 %NEW_VAR% 以确保安全。启动一个新的 devenv 实例并进行调试。
      【解决方案8】:

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

      【讨论】:

      • Visual Studio 拒绝接受程序启动路径中除了可执行文件 (.exe) 之外的任何内容。
      【解决方案9】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-22
        • 2019-06-05
        • 2011-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-18
        相关资源
        最近更新 更多