背景:
我正在将其中一个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应用程序服务中指定的连接字符串,并且引发了以下错误:
The connection name 'LocalSqlServer' was not found in the applications configuration or the connection string is empty.
问题:
为什么应用会忽略App服务环境变量?
给我的印象是,在Azure中设置的连接字符串优先。正确吗?
答案 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完成。