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

Ant*_*ony 6 c# visual-studio

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

我尝试了以下内容

Environment.SetEnvironmentVariable("foo", "bar", EnvironmentVariableTarget.Process);
Environment.SetEnvironmentVariable("foo", "bar", EnvironmentVariableTarget.Machine);
Run Code Online (Sandbox Code Playgroud)

但是虽然这个变量持续存在,但是一旦我点击运行它似乎没有将它传递给程序.

我正在寻找其他方法来尝试,我不介意他们是否是hacky.

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

Ste*_*e B 5

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

public class MyEnvironment {

    public string SomeVariable{
        get{

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

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Mor*_*sen 4

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

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

  • 您可以在调试部分下的项目属性中禁用 *.vshost.exe 内容。 (3认同)