Azure App Service 中 web.config 被自动添加环境变量配置问题咨询
问题根因
- 你遇到的自动插入配置是ASP.NET Core内置的Web SDK的默认行为:当
dotnet publish执行时,如果当前进程环境中存在名为EnvironmentName或ASPNETCORE_ENVIRONMENT的变量,SDK会自动在生成的web.config中插入对应的环境变量配置项。 - Azure Pipelines中你定义的
environmentName构建变量会自动作为环境变量暴露给构建进程,因此触发了上述自动配置逻辑,导致产物中的web.config被额外插入了配置。本地执行命令时没有对应环境变量,所以不会生成该配置。 - 你无法直接修改实例上的
web.config是因为开启了WEBSITE_RUN_FROM_PACKAGE模式,该模式下站点根目录完全只读,所有修改都需要调整构建产物后重新发布。
解决方案
方案1:彻底禁用web.config自动转换(最符合你的需求)
在你的ASP.NET Core项目的.csproj文件中加入以下配置,即可完全关闭Web SDK对web.config的自动修改逻辑,不会额外插入任何环境变量配置:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <!-- 加在现有PropertyGroup节点下 --> <IsWebConfigTransformDisabled>true</IsWebConfigTransformDisabled> </PropertyGroup> </Project>
该配置生效后,后续构建生成的web.config会完全保留你代码库中的原始内容,不会被自动修改。
方案2:显式指定发布时的环境名
如果你不想修改项目文件,也可以在dotnet publish命令中显式指定环境名参数,强制生成的配置值为你需要的Production:
dotnet publish --configuration Release --output D:\a\1\s/dotnet-publish-output /p:EnvironmentName=Production
补充说明
如果你使用的是ASP.NET Core默认的环境名读取逻辑,请注意标准的环境变量名称是ASPNETCORE_ENVIRONMENT,而非你配置的ASPNETCORE_ENVIRONMENTNAME。App Service中配置的应用设置优先级高于web.config中定义的环境变量,如果变量名正确的话,正常情况下App Service的配置会覆盖web.config中的值,你可以检查是否是变量名拼写错误导致配置未生效。
内容的提问来源于stack exchange,提问作者Luke Puplett
相关产品推荐
相关产品推荐

