提问者:小点点

如何在. net中阅读弹性豆茎环境属性?


如何从我的AWS弹性豆茎应用程序中读取环境属性?

Configuration > Software Configuration > Environment Properties

以下方法都不起作用:

ConfigurationManager.AppSettings["MyServiceUrl"]
ConfigurationManager.AppSettings["aws:elasticbeanstalk:application:environment.MyServiceUrl"]
Environment.GetEnvironmentVariable("MyServiceUrl")
Environment.GetEnvironmentVariable("aws:elasticbeanstalk:application:environment.MyServiceUrl")

完全限定名称尝试来自AWSEB留档。

有什么想法吗?


共3个答案

匿名用户

在您的. ebExsionsions/myoptions.config文件中:

option_settings:
  - option_name: MyServiceUrl
    value: change me

这将在您的EB环境属性部分添加MyServiceUrl选项(正如您已经看到的)。部署后,这将向您的Web. Config文件添加以下内容:

<appSettings>
  <add key="MyServiceUrl" value="change me" />
</appSettings>

如果您RDP到您的EC2实例中,您将看到这一点。

使用EB控制台更改属性时,将在Web. Config文件中修改设置。

因此,您可以使用标准AppSettings方法访问此属性:

string value = ConfigurationManager.AppSettings["MyServiceUrl"];

捕获:

您需要确保您的Web. Config文件不包含此设置,否则EB不会替换它。如果您的Visual Studio部署包包含此设置,那么EB不会替换它,并且当您通过代码访问该属性时,您将始终收到已部署的值。

解决方案:

在您的Web. Release.config文件中,在Visual Studio部署期间删除该设置:

<appSettings>
  <add key="MyServiceUrl" xdt:Transform="Remove" xdt:Locator="Match(key)" />
</appSettings>

这将在Visual Studio部署期间从Web. Config中删除设置,并允许EB在EB部署期间将值添加到文件中。

匿名用户

看起来这种行为在弹性豆茎中已经改变了。文档现在说

AWS管理控制台中应用的设置会覆盖配置文件中的相同设置(如果存在)。这使您可以在配置文件中拥有默认设置,并在控制台中使用特定于环境的设置覆盖它们。

因此,您现在可以在web. config和Elastic Beanstik配置中使用相同的配置名称,Elastic Beanstik值将覆盖web.config中的任何值。看起来EB只是在web.config文件中添加新条目,因此在这两个地方定义的任何值都将有两个条目。由于EB添加的条目在文件的后面,它们优先。

匿名用户

确实,在AWSDoc(使用AWS弹性豆茎。NET平台)上显示:

AWS管理控制台中应用的设置会覆盖配置文件中的相同设置(如果存在)。这使您可以在配置文件中拥有默认设置,并在控制台中使用特定于环境的设置覆盖它们。有关优先级和其他更改设置方法的详细信息,请参阅配置选项。

…我认为它指的是. eb扩展名配置文件,而不是app.config或web.config文件。在上面的链接中,提到了适用的“优先级”规则;它表明需要优先的是“在创建环境或更新环境期间指定的设置”,所以我理解的是部署期间设置的设置值优先(这些设置在app.config/web.config中)。

我刚刚对此进行了测试,上面的马特·豪泽回答是正确的,并且仍然有效。您必须在部署版本中删除app. config/web.config键才能看到“环境属性”被考虑在内。