我正在使用 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>
更新3 我刚刚创建了一个空的Web项目,它可以工作,所以看起来问题出现在我的代码或项目配置中。
答案 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;
}