Asp.Net Core 2中用PowerShell修改web.config失败求助
嘿,我来帮你搞定这个ASP.NET Core发布配置的问题——你遇到的情况我之前也碰到过,大概率是PowerShell操作XML的步骤有疏漏,导致配置没正确生效。
问题根源分析
你的PowerShell代码有几个关键问题:
- 节点没插入到正确位置:
modules节点必须放在web.config的<system.webServer>节点下,原代码只创建了节点但没指定父节点,等于白忙活 - 属性名不完整:你代码里的
runAllManagedModulesForAl...明显是截断了,完整属性名是runAllManagedModulesForAllRequests,拼写错了肯定不生效 - 没保存修改:修改XML文档后必须调用
Save()方法,不然所有变更都只在内存里,不会写入文件
修正后的完整PowerShell脚本
# 先准确定位web.config的路径,用Join-Path比拼接字符串更稳妥 $webConfigPath = Join-Path -Path (Get-Item -Path ".").FullName -ChildPath "Bemfeito.Services.WebApi\obj\Release\netcoreapp2.0\PubTmp\Out\web.config" # 加载XML文档 $doc = [xml](Get-Content -Path $webConfigPath) # 找到system.webServer节点,这是modules的父节点 $webServerNode = $doc.configuration."system.webServer" # 创建modules节点并设置属性 $moduleNode = $doc.CreateElement("modules") $moduleNode.SetAttribute("runAllManagedModulesForAllRequests", "false") # 创建remove子节点并指定要移除的模块名 $removeNode = $doc.CreateElement("remove") $removeNode.SetAttribute("name", "WebDAVModule") # 把remove节点嵌套到modules里,再把modules节点加到system.webServer下 $moduleNode.AppendChild($removeNode) | Out-Null $webServerNode.AppendChild($moduleNode) | Out-Null # 最后一定要保存修改! $doc.Save($webConfigPath)
额外的稳妥方案
如果执行脚本后还是没生效,可能是发布过程会覆盖obj目录下的webConfig。这种情况下,直接修改项目根目录的web.config更靠谱,把这段配置提前加进去,发布时就会自动包含:
<configuration> <!-- 其他现有配置 --> <system.webServer> <!-- 其他server配置 --> <modules runAllManagedModulesForAllRequests="false"> <remove name="WebDAVModule" /> </modules> </system.webServer> </configuration>
内容的提问来源于stack exchange,提问作者Matthew Flynn
相关产品推荐
相关产品推荐

