【问题标题】:Set Visual Studio's environment variables for debugging a project设置 Visual Studio 的环境变量以调试项目
【发布时间】:2013-10-07 15:33:58
【问题描述】:

我正在为 Visual Studio 创建一个扩展,请求的功能之一是它能够将环境变量更改为多个选项之一,一旦被调试,它将被正在开发的应用程序继承。

我已经尝试了以下

Environment.SetEnvironmentVariable("foo", "bar", EnvironmentVariableTarget.Process);
Environment.SetEnvironmentVariable("foo", "bar", EnvironmentVariableTarget.Machine);

但是虽然这会保留变量,但一旦我点击运行,它似乎并没有将其传递给程序。

我正在寻找其他方法来尝试这样做,我不介意它们是否是 hacky。

编辑:为了澄清起见,这个过程应该对正在调试的(任意)程序是透明的。它还必须是程序化解决方案

【问题讨论】:

    标签: c# visual-studio


    【解决方案1】:

    您可以使用编译常量。定义一个负责检索变量的类:

    public class MyEnvironment {
    
        public string SomeVariable{
            get{
    
    #if DEBUG
               return "bar";
    #else
               return Environment.GetEnvironmentVariable("foo");
    #endif
    
            }
        }
    }
    

    您也可以使用某种 IOC 来注入变量提供程序实例。读取环境的“生产”版本,或带有硬编码值的调试版本。

    【讨论】:

      【解决方案2】:

      我猜你正在调试的程序为什么没有得到你的环境变量。进程在进程启动时读取环境变量。如果您正在开发一个 .NET 应用程序,Visual Studio 创建一个 *.vshost.exe 进程以加速调试启动。因此,当您开始调试时,Visual Studio 不会创建启动新进程 - 结果是不会读取您的环境变量。

      相反,您可以使用memory mapped file 来执行所需的IPC

      【讨论】:

      • 杀死 .vshost.exe 进程有效。感谢您的启发
      • 您可以禁用 *.vshost.exe 的东西 - 在调试部分下的项目属性中。
      【解决方案3】:

      我不知道是否可以通过编程方式更改设置,但我会看看这个问题:How do I set specific environment variables when debugging in Visual Studio?

      如果您自己启动该过程,则传递给 Process.Start()StartInfo 对象具有您也可以考虑使用的 EnvironmentVariables 属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-11
        • 2022-09-30
        • 2019-06-05
        • 1970-01-01
        • 1970-01-01
        • 2010-09-11
        相关资源
        最近更新 更多