C# Environment.GetEnvironmentVariable赢得';找不到变量值

C# Environment.GetEnvironmentVariable赢得';找不到变量值,c#,.net,web-services,iis,environment-variables,C#,.net,Web Services,Iis,Environment Variables,为什么Environment.GetEnvironmentVariable(“variableName”)如果调用是从IIS上托管的webMethod中进行的,而如果我从同一台计算机上的控制台应用程序调用它,它将起作用,那么它将无法获取变量的值 在哪里设置这些变量以使IIS web服务可见?我是否应该使用Environment.GetEnvironmentVariable(name,target)中的第二个参数来获取它 其实很简单: [WebMethod(Description = "Gets

为什么
Environment.GetEnvironmentVariable(“variableName”)
如果调用是从IIS上托管的webMethod中进行的,而如果我从同一台计算机上的控制台应用程序调用它,它将起作用,那么它将无法获取变量的值

在哪里设置这些变量以使IIS web服务可见?我是否应该使用
Environment.GetEnvironmentVariable(name,target)
中的第二个参数来获取它

其实很简单:

[WebMethod(Description = "Gets the environment variable value.")]
public string GetEnvironmentVariable()
{
    return Environment.GetEnvironmentVariable("VARIABLE_NAME_HERE");
}

顺便说一句,这里的变量_NAME_是在系统和用户级别设置的。

阅读此处了解更多信息:


具体而言:

什么是系统环境变量

环境变量是保存有关环境的信息的字符串 系统中的整个环境。这些字符串值是动态的,并且 它们会影响系统的运行方式。环境 变量可分为两种主要类型:

系统变量:它们影响整个系统,无论当前系统如何 用户是。它们由Windows定义并保存在注册表中。你 必须是管理员才能修改它们。你通常 需要重新启动计算机才能使这些更改生效

用户变量:它们影响当前系统的当前环境 系统用户。它们可以被任何系统删除、修改和添加 用户。Windows安装程序、某些程序和用户都使用它们。 对这些变量的更改将保存到注册表并生效 马上



如果试图调用计算机上不存在的环境变量,则会出现问题。您必须尝试查找本地计算机上存在的变量,但web服务的主机上不存在该变量。

您需要使用
iisreset
命令重新启动IIS。

我遇到了同样的问题,多亏了,我想出了这个办法,它成功了:

var value = Environment.GetEnvironmentVariable(key, EnvironmentVariableTarget.User)

重要的一点是使用了
EnvironmentVariableTarget。用户

重新启动Visual Studio为我修复了它(猜测IIS Express也会缓存这些值)

有一个DLL或一些被截取的代码,由
cmd
、PowerShell和Visual Studio(可能也由VS代码)共享,它们在加载环境变量时缓存环境变量(分别针对每个应用程序)


因此,如果您正在测试更改环境变量的内容,而不是重新启动IDE(速度很慢),您可以只启动一个单独的
cmd
或PowerShell进行测试,更改环境变量,然后重新启动
cmd
或PowerShell。我建议使用PowerShell,因为您可以使用向上箭头重复使用以前会话中键入的命令。

这就是问题所在,该变量在主机的系统和用户级别都存在=/。我创建了一个控制台应用程序只是为了检查变量,它可以工作(显示我期望的值),但是当我在同一台机器上调用iis上托管的ws时,相同的方法返回空值。哦,c***,我所需要的只是重新启动服务器。。。我的应用程序正在用户级别设置值。现在有道理了。谢谢很高兴听到你的想法。如果需要,请编辑我的答案并添加有关重新启动服务器以及为什么需要重新启动服务器的警告。这个答案可能会帮助其他人。我遇到了一个类似的问题,我添加了一些自定义环境变量和环境。GetEnvironmentVariable(“custom_variable”)没有读取它。我重新启动了系统,同样的代码也运行了。你说调用环境变量是什么意思?如何调用环境变量?这实际上也适用于系统变量。只需将.User更改为.Machine。我添加了PATH var,但它并没有仅使用Environment从代码行获取设置值。GetEnvironmentVariable(“PATH”)正在更改为Environment。GetEnvironmentVariable(“PATH”,EnvironmentVariableTarget.Machine)检索了新值。这对我也很有效。没有它,我不得不重新启动我的系统,即使我添加了一个用户变量。VS显然在运行时没有检测到环境变量的变化。知道了这一点,我就省去了一大堆毫无意义的故障排除。这个答案应该在列表中的较高位置。这是一个多么容易解决的问题啊。我只是忽略了这一点,但男孩,这解决了我的问题。谢谢你的简单而有益的建议!不知道为什么,但这对我也很有效。奇怪的是,在我的DBContext类中,我没有这个问题,但是在Startup.cs(使用
EnvironmentVariableTarget.Process
)中,我无法找到环境变量,除非我使用
EnvironmentVariableTarget.User/Machine
。重新启动Visual Studio后,我能够使用3个枚举中的任何一个找到值。构建PowerShell的Windows
cmd.exe
(也称为cmd或命令提示符),在加载时缓存所有环境变量。VS 2019-在不重新启动的情况下找到用户变量。但系统变量要求系统重新启动。