我的云服务中的角色没有设置任何自定义环境变量。 --这意味着如果我枚举调用
Environment.GetEnvironmentVariables()
的结果,则仅设置标准环境变量(例如 PATH
或用户 ID)。
当我使用模拟器在本地调试云服务时,环境变量就在那里,所以我在这里有点不知所措。
相关.csdef:
<WebRole name="..." vmsize="Small">
<ConfigurationSettings>
<Setting name="FirstSetting" />
<Setting name="AnotherSetting" />
</ConfigurationSettings>
<Runtime>
<Environment>
<Variable name="FirstSettingEnvVar">
<RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/ConfigurationSettings/ConfigurationSetting[@name='FirstSetting']/@value" />
</Variable>
<Variable name="SecondSettingEnvVar">
<RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/ConfigurationSettings/ConfigurationSetting[@name='SecondSetting']/@value" />
</Variable>
</Environment>
</Runtime>
以及相关的.cscfg:
<Role name="...">
<Instances count="2" />
<ConfigurationSettings>
<Setting name="FirstSetting" value="ABCD" />
<Setting name="SecondSetting" value="WXYZ" />
</ConfigurationSettings>
</Role>
所以我需要这个设置,因为我试图从 web.config 设置环境变量以链接到应用程序配置(https://learn.microsoft.com/en-us/azure/azure-app-configuration/quickstart -dotnet-app)。
结果我必须为批处理文件创建启动任务(提升权限)。让它设置变量,然后通过命令行重新启动 IIS(因为 GUI 无论如何都不能正常工作):-
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /F /v #KEY# /D #VAL#
iisreset /restart
net start w3svc
之后,嘿,很快就可以了。 IIS 将在此任务开始之前拍摄环境主机的快照,因此您必须重新启动它。此外,使用不会影响部署的 WebRole 类型,因为它全部在 IIS 中,而不是像 WorkerRole 类型那样的进程。