为什么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");
}
顺便说一下,VARIABLE_NAME_HERE是在系统和用户级别设置的。
7条答案
按热度按时间cygmwpex1#
重新启动Visual Studio为我修复了它(我猜IIS Express也缓存了这些值)。
xiozqbni2#
我也遇到过同样的问题,多亏了谢尔盖的回答,我想出了这个办法,而且奏效了:
最重要的是使用
EnvironmentVariableTarget.User
mf98qq943#
阅读此处了解更多信息:
Using System Wide Environment Variables in .NET Application
具体而言:
什么是系统环境变量?
环境变量是保存有关系统中整个环境的信息的字符串。这些字符串值是动态的,它们可以影响系统的行为方式。环境变量可以分为两种主要类型:
系统变量:无论当前用户是谁,它们都会影响整个系统。它们由Windows定义并保存在注册表中。您必须是管理员才能修改它们。通常需要重新启动计算机才能使这些更改生效。
用户变量:它们影响当前系统用户的当前环境。任何系统用户都可以删除、修改和添加它们。它们由Windows安装程序、某些程序和用户使用。对这些变量的更改将保存到注册表中,并立即生效。
如果您尝试访问的环境变量在您的计算机上不存在,则会出现问题。您必须尝试查找的变量存在于本地计算机上,但不在Web服务的主机上。
pxy2qtax4#
您需要使用
iisreset
命令重新启动IIS。a64a0gku5#
cmd
、PowerShell和Visual Studio(也可能是VS Code)共享一个DLL或一些代码片段,在加载环境变量时缓存这些变量(分别为每个应用程序)。因此,如果您正在测试某个需要更改环境变量的项目,您可以启动一个单独的
cmd
或PowerShell进行测试,更改环境变量,然后重新启动该cmd
或PowerShell,而不是重新启动IDE(这会很慢)。我推荐使用PowerShell,因为您可以使用向上箭头重复使用在以前的会话中键入的命令。kgsdhlau6#
我的项目的csproj文件没有(或不需要)local.settings.json。通过添加它的更新节点,Environment.GetEnvironmentVariable(“variablename”)开始工作并从变量中获取信息。
au9on6nz7#
我遇到了同样的问题。如果Environment.GetEnvironmentVariable()不起作用,就在program.cs文件中设置它的值。在我的例子中,我在appsettings.json文件中有这个值,所以我可以在program.cs中设置这个值,如下所示: