【问题标题】:How to override web.config values in custom section in Azure Web App?如何覆盖 Azure Web App 的自定义部分中的 web.config 值?
【发布时间】:2016-10-28 08:07:38
【问题描述】:

在 Azure Web App 中可以轻松覆盖 web.config AppSettings 部分。例如。如果我有以下 web.config:

<appSettings>   
    <add key="AllowedCORSOrigin" value="http://localhost:26674"/>
</appSettings>

我可以像这样在门户的应用设置 UI 中覆盖它:

我在 web.config 中还有一个自定义部分:

<AdWordsApi>
    <add key="OAuth2RefreshToken" value="TOKEN" />
</AdWordsApi>

是否也可以以某种方式覆盖它?我试过AdWordsApi.OAuth2RefreshTokenAdWordsApi:OAuth2RefreshToken,但这并不容易。

附:有趣的是,如果我想在服务器上使用另一种身份验证模式,是否可以使用其他自定义部分。

<system.web>
    <authentication mode="None" />
</system.web>

【问题讨论】:

    标签: azure web-config environment-variables azure-web-app-service


    【解决方案1】:

    简短的回答是不可能。

    您描述的机制仅适用于应用程序设置和连接字符串。高层,它的工作方式是:

    • 您的 Azure 应用设置成为环境变量
    • 在运行时,一个特殊的模块会在 .NET 配置系统中动态设置它们。请注意,物理 web.config 永远不会被修改。

    但是很难让这种机制在任意配置部分上工作,因为如果不修改物理文件就无法动态影响这些部分。

    【讨论】:

    • 这个问题有什么解决办法吗?不发布 web.config(并直接在 Azure 中修改)或使用 web.config 转换?据我记得,它适用于具有 A.B.C 语法的 ASP.NET Core,但它具有更简单的 json 配置 :)
    • 如果你通过 git 发布,你可以想象有一个构建步骤在你的 web.config 文件上进行令牌替换。这意味着您在更改设置时需要重新部署,但至少您只能在 Azure 中保留机密。
    • 好的,我明白了,非常感谢您的解释。 ASP.NET Core 支持它是对的吗?我们可以通过这种方式覆盖设置中的任何值?
    • 不是 Core 方面的专家,但只要配置系统使用环境变量作为覆盖硬编码值的一种方式,它就可以工作。
    • 对于那些想知道的人,“特殊模块”被称为EnvSettings,它只存在于 GAC 中。您可以使用 Kudu 将 "D:\Windows\Microsoft.Net\assembly\GAC_MSIL\EnvSettings\v4.0_1.0.0.0__31bf3856ad364e35\EnvSettings.dll" 复制到您的本地计算机,这样您就可以在其中戳进去看看它是如何工作的。
    【解决方案2】:

    如果您使用的是 Visual Studio,请使用 web.config 转换来更改配置设置,具体取决于您是在本地运行还是部署到 Azure:

    How to Transform Web.config

    简单来说,您可以再创建一个构建配置(通常是调试和发布)。在您的 Visual Studio 解决方案中,右键单击现有的 web.config 文件并单击 "Add Config Transform",这将创建一个 Web.Debug.ConfigWeb.Release.Config 文件,然后您可以根据环境使用特定设置对其进行自定义。将此与您的 Azure 构建配置相关联,然后您就可以对本地和远程部署进行任何设置组合。

    【讨论】:

    • 我看到这是可以实现的,但我有一些“秘密”的东西,例如我想放入 Azure 而不是在本地或源代码控制中。因此,尽管此解决方案有效,但如果可能,我更愿意从门户使用 Azure 环境变量。不过还是谢谢你的回答
    【解决方案3】:

    这是旧的,但留下这个参考来说明如何使用 Azure Resource Manager 来解决这个问题。

    【讨论】:

      【解决方案4】:

      您可以通过在 App.Release.config 中执行以下步骤,按照 VSTS 中列出的值转换值:-

      1. 在配置部分添加 xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"
      <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
          </configuration>
      
      1. 在自定义部分添加 xdt:Transform="Replace",如下所示
      <AdWordsApi  xdt:Transform="Replace">
          <add key="OAuth2RefreshToken" value="TOKEN" />
      </AdWordsApi>
      
      1. 在发布管道中创建变量令牌,例如 OAuth2RefreshToken

      2. 然后在文件配置中使用如下

      <AdWordsApi  xdt:Transform="Replace">
          <add key="OAuth2RefreshToken" value="#{OAuth2RefreshToken}#" />
      </AdWordsApi>
      

      【讨论】:

        猜你喜欢
        • 2013-05-07
        • 1970-01-01
        • 2011-08-27
        • 1970-01-01
        • 2019-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-31
        相关资源
        最近更新 更多