我正在使用Azure App Service。我试图在应用程序设置-> 应用程序设置和连接字符串中添加几个参数,以覆盖来自web.config
的值我无法使用ConfigurationManager访问这些设置。我的项目基于.Net 4.6。
我可以使用Environment.GetEnvironmentVariable("name")
访问这些应用程序设置和连接字符串。
此外,这些设置在页面https://.scm.azurewebsites.net/Env.cshtml的AppSettings和连接字符串部分中不可见,仅在环境变量部分中可见
我读了很多文章,但没有找到答案。是设计使然,还是我做错了?
更新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项目,并且可以正常工作,因此问题似乎出在我的代码或项目配置中。
我可以使用Environment.GetEnvironmentVariable(“ name”)访问这些应用设置和连接字符串。同样,这些设置在“ AppSettings和连接字符串”部分的https://.scm.azurewebsites.net/Env.cshtml页上不可见,仅在“环境变量”>部分中不可见
据我所知,kudu的环境页面将仅显示默认的应用程序设置和连接字符串。它不会包含webconfig的appsettings和您在门户中设置的appsettings。
据此article,您将找到以下信息:
应用设置对于.NET应用程序,这些设置将在运行时注入到.NET配置AppSettings中,从而覆盖现有设置。连接字符串对于每个应用程序设置,都会创建两个环境变量。一个使用应用设置条目指定的名称,另一个使用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;
}