我有一个网站(不是网络角色),我正在使用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中覆盖这些类型的设置吗?
答案 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;应用设置并在那里设置密钥,值对。
所有设置都将显示为环境变量,因此您可以在测试和生产环境中为相同设置设置不同的值。
有关详细信息,请参阅此处:
答案 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中的文件。