You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 6 WebAPI的Web.config转换失效及配置疑问

.NET Core 6 WebAPI部署IIS的配置问题与解答

问题背景

将.NET Core 6 WebAPI部署到内部IIS服务器时,配置了Web.config及对应的web.Debug.config、web.Release.config转换文件,但使用Release配置发布时出现两个问题:

  1. Web.config未完成转换,生成了三个独立的Web配置文件;
  2. 发布包中保留了所有环境的appsettings文件,而非仅生产环境版本。

相关配置文件内容

Web.config

<?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="bin\Debug\net6.0\SMARTapi.exe" arguments="" stdoutLogEnabled="false" hostingModel="InProcess">
        <environmentVariables>
          <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="development" />
        </environmentVariables>
      </aspNetCore>
    </system.webServer>
  </location>
</configuration>

web.Release.config

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <location>
        <system.webServer>
            <aspNetCore>
                <environmentVariables>
                    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="production" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
                </environmentVariables>
            </aspNetCore>
        </system.webServer>
    </location> 
</configuration>

问题解答

1. Web.config转换失效的原因

  • 节点匹配不精确:原Web.config中的<location>节点带有path="." inheritInChildApplications="false"属性,但web.Release.config中的<location>节点没有这些属性,XDT转换引擎无法精准匹配目标节点,导致转换规则无法生效。
  • 发布配置未启用转换:检查项目的Release发布配置,确认是否开启了Web.config转换功能。如果发布时未勾选相关选项,转换文件不会被执行,只会原样输出所有Web配置文件。
  • 项目文件关联缺失:确保项目的.csproj文件中正确关联了转换文件,需包含以下配置:
<Content Include="Web.config">
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="web.Debug.config">
  <DependentUpon>Web.config</DependentUpon>
</Content>
<Content Include="web.Release.config">
  <DependentUpon>Web.config</DependentUpon>
</Content>

若缺失该配置,Visual Studio无法识别转换文件与主Web.config的关联,发布时不会执行转换操作。

2. 修复Web.config转换后,appsettings文件问题是否同步解决?

不会,这两个问题属于独立的发布配置环节:

  • Web.config转换由XDT规则和发布时的Web.config转换开关控制;
  • appsettings文件的保留逻辑需要单独配置,可通过以下两种方式实现:
    • 修改.csproj文件:针对Release配置添加条件,排除非生产环境的appsettings文件:
    <ItemGroup Condition="'$(Configuration)' == 'Release'">
      <Content Remove="appsettings.Development.json" />
      <Content Remove="appsettings.Staging.json" />
      <None Include="appsettings.Development.json">
        <CopyToOutputDirectory>Never</CopyToOutputDirectory>
      </None>
      <None Include="appsettings.Staging.json">
        <CopyToOutputDirectory>Never</CopyToOutputDirectory>
      </None>
    </ItemGroup>
    
    • 配置发布选项:在项目发布配置的「文件发布选项」中,勾选「排除文件」,指定要排除的非生产环境appsettings文件。

内容的提问来源于stack exchange,提问作者Mych

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:35:09