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

7

我正在为Visual Studio创建一个扩展程序,其中一个要求的功能是能够将环境变量更改为多个选项中的一个,然后调试应用程序时该变量将被继承。

我已经尝试了以下操作:

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

但是,尽管它保留了该变量,但一旦我点击运行,它似乎没有将其传递给程序。我正在寻找其他方法来尝试,如果它们有点不正规也没关系。 编辑:为了澄清,这个过程对于正在调试的(任意)程序应该是透明的。它还必须是一个编程解决方案。
3个回答

5

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

public class MyEnvironment {

    public string SomeVariable{
        get{

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

        }
    }
}

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

4
我猜测您正在调试的程序为何无法获取您的环境变量。一个进程在启动时会读取环境变量。如果您正在开发一个 .NET 应用程序,Visual Studio 会创建一个 *.vshost.exe 进程以加速调试启动。因此,当您开始调试时,Visual Studio 不会创建新的进程 - 结果是您的环境变量未被读取。

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


结束 .vshost.exe 进程是有效的。感谢您的启发。 - Anthony
3
你可以在项目属性的调试部分禁用 *.vshost.exe 相关内容。 - Morten Frederiksen

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接