Environment.GetEnvironmentVariable将找不到变量值

如果调用是在IIS上托管的webMethod中进行的,那么为什么Environment.GetEnvironmentVariable("variableName")不会获得变量值?如果我从同一台机器上的控制台应用程序调用它,它将会起作用?

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

它实际上非常简单:

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

顺便说一句,VARIABLE_NAME_HERE设置在系统和用户级别。

阅读此处了解更多信息:

在.NET应用程序中使用系统范围的环境变量


特别:

什么是系统环境变量?

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

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

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


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

我遇到了同样的问题,感谢@sergserg,我提出了这个并且它有效:

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

重要的是使用EnvironmentVariableTarget.User

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

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