6

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

我试过以下

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

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

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

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

4

3 回答 3

4

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

public class MyEnvironment {

    public string SomeVariable{
        get{

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

        }
    }
}

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

于 2013-10-07T15:40:18.617 回答
3

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

相反,您可以使用内存映射文件来执行所需的IPC

于 2013-10-07T16:00:17.223 回答
0

我不知道是否可以通过编程方式更改设置,但我会看看这个问题:如何在 Visual Studio 中调试时设置特定的环境变量?

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

于 2013-10-07T15:44:02.587 回答