55

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 是在系统和用户级别设置的。

4

6 回答 6

84

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

于 2017-11-09T21:49:47.920 回答
45

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

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

重要的是使用EnvironmentVariableTarget.User

于 2016-12-31T17:56:00.707 回答
27

阅读此处了解更多信息:

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


具体来说:

什么是系统环境变量?

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

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

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


如果您尝试访问计算机上不存在的环境变量,您将遇到问题。您必须尝试查找本地计算机上存在的变量,而不是您的 Web 服务主机上的变量。

于 2012-10-05T22:38:10.903 回答
15

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

于 2014-01-24T08:55:56.207 回答
0

有一个 DLL 或一些代码被cmdPowerShell 和 Visual Studio(可能也由 VS Code)共享,它们在加载时缓存环境变量(分别为每个应用程序)。

因此,如果您正在测试要更改环境变量的东西,而不是重新启动 IDE(这很慢),您可以启动单独的cmdPowerShell 或 PowerShell 进行测试,更改环境变量,然后重新启动它cmd或 PowerShell。我推荐使用 PowerShell,因为您可以使用向上箭头来重用之前会话中键入的命令。

于 2021-03-02T21:49:27.113 回答
0

我的项目的 csproj 文件没有(或预期的)local.settings.json。通过添加它的更新节点,Environment.GetEnvironmentVariable("variablename") 开始工作并从变量中获取信息。

<ItemGroup>
    <None Update="host.json">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
</ItemGroup>
于 2022-01-10T17:18:28.667 回答