ConfigurationManager

时间:2017-03-29 17:26:40

标签: asp.net azure azure-web-app-service configurationmanager .net-4.6

我正在使用 Azure App Service 。我想在应用程序设置 - >部分添加几个参数应用设置连接字符串覆盖来自web.config的值

我无法使用 ConfigurationManager 访问这些设置。 我的项目基于.Net 4.6。

我可以使用Environment.GetEnvironmentVariable("name")访问这些应用设置和连接字符串。

此外,这些设置在AppSettings和Connection Strings部分的https://.scm.azurewebsites.net/Env.cshtml页面上不可见,仅在环境变量部分

中可见

我读了很多文章但没找到答案 是设计还是我做错了什么?

更新1 我在VS 2015更新3中创建了一个测试项目 - Webforms App它可以工作,但它包含OWIN,我的项目没有。

更新2 看起来我说错了我的问题。 ConfigurationManager工作,我可以从web.config访问设置,但在部署到Azure后,我希望我将在Azure App Service中输入的值替换值 - >应用程序设置 - >应用设置和连接字符串。但它不会发生。

我的web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>

 <appSettings>
    <add key="APPINSIGHTS_INSTRUMENTATIONKEY" value="dummy" />
 </appSettings>

 <connectionStrings>
    <add name="default" providerName="System.Data.SqlClient" connectionString="empty" />
    <add name="ApolloTI" providerName="System.Data.SqlClient" connectionString="empty" />
    <add name="TestData" providerName="System.Data.SqlClient" connectionString="empty" />
 </connectionStrings>
   ...
</configuration>

Screenshot - Setting in Azure

更新3 我刚刚创建了一个空的Web项目,它可以工作,所以看起来问题出现在我的代码或项目配置中。

1 个答案:

答案 0 :(得分:0)

  

我可以使用Environment.GetEnvironmentVariable(“name”)访问这些应用程序设置和连接字符串。   此外,这些设置在AppSettings和Connection Strings部分的页面https://.scm.azurewebsites.net/Env.cshtml上不可见,仅在环境变量部分

中可见

据我所知,kudu的环境页面只显示默认的appsettings和Connection Strings。 它不包含webconfig的appsettings和您在门户中设置的appsettings。

根据此article,您会找到以下信息:

  

应用设置   对于.NET应用程序,这些设置会在运行时注入.NET配置AppSettings,从而覆盖现有设置。   连接字符串   对于每个应用程序设置,都会创建两个环境变量;一个具有app设置条目指定的名称,另一个具有APPSETTING_的前缀。两者都包含相同的值。

     

对于.NET应用程序,这些连接字符串会在运行时注入到.NET配置connectionStrings设置中,从而覆盖密钥等于链接数据库名称的现有条目。   这些设置也将在运行时作为环境变量提供,前缀为连接类型。环境变量前缀如下:

     

SQL Server:SQLCONNSTR_
  MySQL:MYSQLCONNSTR_
  SQL数据库:SQLAZURECONNSTR_
  自定义:CUSTOMCONNSTR_

     

例如,如果自定义连接字符串被命名为Redis,则可以通过环境变量CUSTOMCONNSTR_Redis访问它。

所以你可以在环境变量中找到你的appsettings和connectionstring。

当您的应用程序运行时,此值将替换webconfig值。

我还使用ConfigurationManager类在我的计算机上编写了一个测试演示,它运行良好。

所以我想你的代码可能有问题。

这是我的测试演示,希望它能为您提供一些提示:

public void ReadAllSettings()
{
    string o = "";
    try
    {
        var appSettings = ConfigurationManager.AppSettings;

        if (appSettings.Count == 0)
        {
            o =  "AppSettings is empty.";
        }
        else
        {
            foreach (var key in appSettings.AllKeys)
            {
                o +=  string.Format("Key: {0} Value: {1}", key, appSettings[key]);
            }
        }
    }
    catch (ConfigurationErrorsException)
    {
        o = "AppSettings is empty.";
    }

    Label1.Text = o;
    Label2.Text = ConfigurationManager.ConnectionStrings["ConnStringDb2"].ConnectionString;
}

结果: enter image description here