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

本文关键字:Visual Studio 环境变量 项目 用于 调试 设置 | 更新日期: 2023-09-27 18:34:11

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

我尝试了以下方法

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

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

我正在寻找其他方法来尝试,我不介意它们是否是黑客。

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

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

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

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

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

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

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

我不知道是否可以

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

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