为什么Net Framework 4.5 Azure部署会忽略应用程序服务连接字符串

时间:2020-02-11 09:53:55

标签: c# asp.net azure azure-devops

背景:

我正在将其中一个Net Framework 4.5项目移至一个DevOps管道中,该管道将部署到我们的App服务中。

为了确保没有将任何应用程序机密复制到源代码控制中,我对 Web.config 连接字符串进行了如下更新:

<connectionStrings configSource="connectionStrings.config"></connectionStrings>

connectionStrings.config 未提交给源代码管理。取而代之的是,我们有一个示例版本,该版本在源代码管理中没有有效的字符串,详细信息如下:

<connectionStrings>
  <clear/>
  <add name="EFDbContext" connectionString="Data Source=XXXXX\SQLEXPRESS;Initial Catalog=XXXXX;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False" providerName="System.Data.SqlClient" />
</connectionStrings>

在Azure App服务中,我们设置了正确的连接字符串。

Azure connection string

在管道中,该应用程序正在成功构建,但是在部署之后,该应用程序未使用Azure应用程序服务中指定的连接字符串,并且引发了以下错误:

The connection name 'LocalSqlServer' was not found in the applications configuration or the connection string is empty.

问题:

为什么应用会忽略App服务环境变量?

给我的印象是,在Azure中设置的连接字符串优先。正确吗?

2 个答案:

答案 0 :(得分:0)

在您添加为“ EFDbContext”的设置中,但是在代码中搜索LocalSqlServer时,我看到一个冲突。检查您的应用程序设置中是否也使用相同的名称

答案 1 :(得分:0)

我同意Sajeetharan的观点,问题是您的代码库正在引用此LocalSqlServer。 Per Microsoft documentation

对于ASP.NET和ASP.NET Core开发人员,请在 App Service就像将它们设置在 Web.config,但是您在App Service中设置的值将覆盖 Web.config。您可以保留开发设置(例如,数据库 Web.config中的文件和生产机密(例如,SQL数据库) 凭据)在App Service中安全。相同的代码使用 本地调试时进行开发设置,并且使用您的 部署到Azure时的生产机密。

我建议检查App Service中部署的文件以进行确认。可以通过门户网站中的Kudoor the App Service Editor完成。