设置Visual Studio环境变量以调试项目

时间:2013-10-07 15:33:59

标签: c# visual-studio

我正在为visual studio创建一个扩展,其中一个要求的功能是它能够将环境变量更改为多个选项之一,然后在调试后正在开发的应用程序继承该选项。 / p>

我试过以下

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

但是当变量持续存在时,一旦我点击运行它似乎没有将它传递给程序。

我正在寻找其他方法来尝试,我不介意他们是不是很好。

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

3 个答案:

答案 0 :(得分:4)

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

public class MyEnvironment {

    public string SomeVariable{
        get{

#if DEBUG
           return "bar";
#else
           return Environment.GetEnvironmentVariable("foo");
#endif

        }
    }
}

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

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

如果您自己开始此过程,则传递给StartInfo的{​​{1}}对象具有Process.Start()属性,您也可以使用该属性。