我正在在.net核心网络api上发布dotnet,它生成了一个 web.config ,如下所示。由于RayGunKey是正确的值,因此对开发人员来说效果很好,但是当我将其放在暂存环境中时,它仍然具有“ SOME-KEY-HERE”值!即使我在登台Web api的 Configuration -> Application Settings 下创建了 RayGunKey (具有不同的值)。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\MyApi.dll" stdoutLogEnabled="false" hostingModel="InProcess" stdoutLogFile=".\logs\stdout">
<environmentVariables>
<environmentVariable name="ASPNETCORE_HTTPS_PORT" value="44392" />
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
<environmentVariable name="RayGunKey" value="SOME-KEY-HERE" />
<environmentVariable name="COMPLUS_ForceENC" value="1" />
</environmentVariables>
</aspNetCore>
</system.webServer>
</location>
</configuration>
我没有配置启动文件吗?如何获取暂存 RagGunKey 而不是使用在publish命令中创建的暂存器?
我当前正在使用以下代码,该代码的确从 web.config 提取了该值,但是正如我所说的,我想从azure应用程序设置(环境变量)中提取该值< / p>
var rayGunKey = Environment.GetEnvironmentVariable("RayGunKey");
我经常被环境变量弄糊涂,在这种情况下尤其如此。直接在其他地方的天蓝色和环境变量中调用应用程序设置并不直观!
非常感谢
答案 0 :(得分:0)
好,所以我必须专注于 launchSettings.json ,并在其中添加我的环境变量,在这里看起来像是放置它们的好地方!然后,Visual Studio创建web.config文件,并使用launchSettings.json文件中定义的这些值填充它。就像现在当我进行 dotnet发布时,该文件似乎已被破坏,该文件将具有定义的最后一个web.config值。在这种情况下,开发人员将详细介绍暂存阶段。即使我尝试在暂存中创建环境变量,据说web.config还是优先考虑的,因此不会看到该值。
相反,我使用 appsetting 进行配置,因此唯一导致配置的因素是 launchSettings.json ASPNETCORE_ENVIRONMENT 值。在运行应用程序时,它将查看此环境变量,并在这种情况下获取适当命名的appsettings appsettings.Staging.json
只要我确保在我的每个环境中都设置了此设置,例如到Develeopment,Staging和Production,然后它将从appsettings..json文件的配置中读取。请参见有关此操作的屏幕截图。我也不再使用Environment.GetEnvironmentVariable。
在我看来,这就像是一次正确的尝试,而过去曾经更简单的事情却变得复杂