Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置Visual Studio';调试项目的环境变量_C#_Visual Studio - Fatal编程技术网

C# 设置Visual Studio';调试项目的环境变量

C# 设置Visual Studio';调试项目的环境变量,c#,visual-studio,C#,Visual Studio,我正在为VisualStudio创建一个扩展,请求的功能之一是它能够将一个环境变量更改为几个选项中的一个,调试完成后将由正在开发的应用程序继承 我试过以下方法 Environment.SetEnvironmentVariable("foo", "bar", EnvironmentVariableTarget.Process); Environment.SetEnvironmentVariable("foo", "bar", EnvironmentVariableTarget.Machine);

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

我试过以下方法

Environment.SetEnvironmentVariable("foo", "bar", EnvironmentVariableTarget.Process);
Environment.SetEnvironmentVariable("foo", "bar", EnvironmentVariableTarget.Machine);
但是,尽管变量仍然存在,但一旦我点击run,它似乎不会将其传递给程序

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


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

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

public class MyEnvironment {

    public string SomeVariable{
        get{

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

        }
    }
}

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

我不知道是否可以通过编程更改设置,但我想看看这个问题:


如果您自己启动进程,则传递给
process.Start()
StartInfo
对象有一个
EnvironmentVariables
属性,您也可以研究使用该属性。

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


相反,您可以使用来执行所需的。

终止.vshost.exe进程。感谢您的启发,您可以禁用调试部分下项目属性中的*.vshost.exe内容。