我正在为visual studio创建一个扩展,其中一个要求的功能是它能够将环境变量更改为多个选项之一,然后在调试后正在开发的应用程序继承该选项。 / p>
我试过以下
Environment.SetEnvironmentVariable("foo", "bar", EnvironmentVariableTarget.Process);
Environment.SetEnvironmentVariable("foo", "bar", EnvironmentVariableTarget.Machine);
但是当变量持续存在时,一旦我点击运行它似乎没有将它传递给程序。
我正在寻找其他方法来尝试,我不介意他们是不是很好。
编辑:为了澄清,此过程对于正在调试的(任意)程序应该是透明的。它也必须是一个程序化的解决方案
答案 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()
属性,您也可以使用该属性。