覆盖Azure网站中的applicationSettings“MySite.Properties.Settings.MySetting”

时间:2015-05-16 22:49:24

标签: azure app-config azure-web-sites

我有一个网站(不是网络角色),我正在使用Basic层部署到Azure。 web.config文件具有以下自动生成的网站设置部分:

  <applicationSettings>
    <MySite.Web.Properties.Settings>
      <setting name="MySetting" serializeAs="String">
        <value>coolValue</value>
      </setting>
    </MySite.Web.Properties.Settings>
  </applicationSettings>

我正在尝试覆盖Azure MySetting部分中Web Apps -> MySite -> Configure -> app settings的值。这个想法是,实时网站的价值与开发版本不同。我试图避免将实时网站的值存储在web.config文件中(也不进行转换)。

我在天蓝色网络应用配置部分的app settings部分尝试了以下值:

  • MySetting = somethingElse
  • MySite.Web.Properties.Settings.MySetting = somethingElse

这些都没有奏效。我喜欢.NET中新的强类型设置类,并且不想将应用程序设置展平(使用旧方法)。

有人知道如何在Azure中覆盖这些类型的设置吗?

3 个答案:

答案 0 :(得分:0)

您是否已将applicationSettings添加到部分组?

<configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
        <section name="Tools.Instrumentation.Properties.Settings" 
                 type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
                 requirePermission="false" />
    </sectionGroup>
</configSections>

答案 1 :(得分:0)

另一种方法是从Azure门户设置应用程序设置。转到Azure门户 - &gt;导航到您的网站 - &gt;设置 - &gt;应用设置并在那里设置密钥,值对。

所有设置都将显示为环境变量,因此您可以在测试和生产环境中为相同设置设置不同的值。

有关详细信息,请参阅此处:

http://azure.microsoft.com/blog/2013/07/17/windows-azure-web-sites-how-application-strings-and-connection-strings-work/

答案 2 :(得分:0)

我询问了微软的支持与解决方案。无法得到这个问题的答案,因为我也想这样做。幸运的是,在尝试更好地理解Microsoft的Web部署时,我发现了如何做到这一点。

首先,您需要使用外部配置文件,而不是仅将其添加到web.config文件中。在您的web.config文件中替换以下内容:

<applicationSettings>
    <MySite.Web.Properties.Settings>
        <setting name="MySetting" serializeAs="String">
            <value>coolValue</value>
        </setting>
    </MySite.Web.Properties.Settings>
</applicationSettings>

使用这样的外部配置文件:

<applicationSettings>
    <MySite.Web.Properties.Settings configSource="BusinessLogic.config" />
</applicationSettings>

同样在您的web.config文件中,您需要将以下内容添加到configSections:

<configSections>
    <sectionGroup name="applicationSettings">
        <section name="MySite.Web.Properties.Settings" />
    </sectionGroup>
</configSections>

如果需要,您可以阅读MSDN article了解更多信息。

在您的business.config文件的根目录中的businessLogic.config文件中,您将添加您的设置:

<MySite.Web.Properties.Settings>
    <setting name="SecretPassword" serializeAs="String">
        <value>1234567890abc!@#</value>
    </setting>
</MyApplication.Properties.Settings>

现在,使用您希望在Azure中具有的设置,将此相同的BusinessLogic.config文件手动添加到Azure上的站点。

最后打开.csproj文件并查找以下XML配置:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

在那里,您可以通过添加如下所示的行来排除部署中的文件:

<ExcludeFilesFromDeployment>BusinessLogic.config</ExcludeFilesFromDeployment>

如果您需要排除更多文件,可以用分号分隔它们。

现在在我的情况下,当我将所有这些文件提交到我的git存储库时,Azure将自动获取它们并且将它们放在一个临时文件中,它将构建项目,然后将其部署到网站所在的文件夹中。在部署时,它会注意忽略BusinessLogic.config文件,而是使用手动放置在Azure中的文件。