如何在进行 Web 部署时排除自动生成的 web.config 文件 ASP.NET Core API (.NET 5)

How to exclude auto generated web.config file when doing web deploy ASP.NET Core API (.NET 5)

我有 ASP.NET Core (.NET 5) API 并且想使用 web deploy visual studio.[=21= 进行部署] 同样在 windows 服务器上,我在 web.config 文件中配置了 HTTPS。 所以在发布 API 的新版本后,web.config 文件更新,我丢失了我的配置。

能否请您推荐一个避免这种情况的解决方案?

为开发和发布环境使用不同的网络配置。 或者您可以将其排除在建筑物之外。为此,在 web.config 属性中将 'Build Action' 更改为 'None',将 'Copy To Output Directory' 更改为 'Do Not copy'

您可以使用 web.config 自定义转换 here

自定义转换 运行 最后,在构建配置、配置文件和环境转换之后。

为每个需要 web.config 转换的自定义配置包含一个 {CUSTOM_NAME}.transform 文件。

在下面的示例中,自定义转换环境变量设置在 custom.transform:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <location>
    <system.webServer>
      <aspNetCore>
        <environmentVariables xdt:Transform="InsertIfMissing">
          <environmentVariable name="Custom_Specific" 
                               value="Custom_Specific_Value" 
                               xdt:Locator="Match(name)" 
                               xdt:Transform="InsertIfMissing" />
        </environmentVariables>
      </aspNetCore>
    </system.webServer>
  </location>
</configuration>

当 CustomTransformFileName 属性 传递给 dotnet 发布命令时应用转换:

dotnet publish --configuration Release /p:CustomTransformFileName=custom.transform

配置文件名称的 MSBuild 属性 是 $(CustomTransformFileName)。

之前有人发过类似问题: Can I override a connection string in the web.config for local development?

我认为最好的建议解决方案如下:

Web.config

<configuration>
  <connectionStrings configSource="connectionstrings.config">
  </connectionStrings>
</configuration>

connectionstrings.config(不在源代码管理中)

<connectionStrings>
  <add name="cs" connectionString="server=.;database=whatever;"/>
</connectionStrings>

每个开发人员都可以选择他们的本地机器指向哪个数据库,只要 connectionstrings.config 文件不在源代码管理中(将其添加到忽略列表),就没有人会踩到对方的脚。