VS2022发布ASP.NET Core应用至Azure未签出web.config发布失败
问题原因
Visual Studio 2022 发布ASP.NET Core应用到Azure时,默认会在发布阶段自动更新本地项目根目录的web.config,写入AspNetCoreModuleV2托管规则、应用启动路径、运行时版本、托管模型等发布相关配置。如果你使用的是需要显式签出才可修改文件的版本控制系统(如TFVC),未签出的web.config默认是只读状态,VS无法写入配置就会直接中断发布流程。
可用解决方案
按推荐优先级从高到低排列:
禁用发布流程自动修改本地
web.config(一劳永逸)
这个方案不需要改动版本控制配置,也不会给文件自动生成额外的修改记录,适合不希望每次发布都改动web.config的场景:- 右键解决方案资源管理器中的项目,选择「编辑项目文件」打开
.csproj配置文件 - 在全局
<PropertyGroup>节点下添加如下配置项:<IsWebConfigTransformDisabled>true</IsWebConfigTransformDisabled> - 保存
.csproj后重新加载项目即可生效。
注意:启用这个配置前,请确认你本地签入版本库的
web.config已经包含ASP.NET Core在IIS/Azure App Service上运行的标准配置,核心配置参考如下:<?xml version="1.0" encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\你的应用入口程序集.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" /> </system.webServer> </location> </configuration>- 右键解决方案资源管理器中的项目,选择「编辑项目文件」打开
开启版本控制自动签出功能
如果你使用TFVC作为版本控制系统,可以开启VS的自动签出配置,发布时需要修改web.config会自动完成签出,无需手动操作:- 打开VS顶部菜单栏「工具」→「选项」
- 依次展开「源代码管理」→「Azure DevOps Server」(旧版本显示为Team Foundation Server)
- 勾选「编辑时自动签出项」,保存设置即可。
临时取消文件只读属性(仅应急使用)
找到本地项目目录下的web.config文件,右键打开属性面板,取消勾选「只读」选项,即可让发布流程正常写入文件。注意这个方法在下次从版本库拉取最新代码后,文件会重新被标记为只读,需要重复设置,不推荐长期使用。
内容的提问来源于stack exchange,提问作者Thomas Woelfer
相关产品推荐
相关产品推荐

