繁体   English   中英

为什么 web.config 是在发布时创建的,而不是在 Asp.Net Core API 中构建项目时创建的?

[英]Why is web.config getting created on publish not on build the project in Asp.Net Core API?

我有 Asp.net Core 3.1 API 项目。 当我构建它时,它不会创建任何 web.config 文件,但是当我在文件夹中使用 VS 2019 发布 API 时,它会创建一个 web.config 文件。 那么为什么它不在构建时创建 web.config(我认为它不应该创建,因为项目中没有 web.config 文件)但为什么它在发布时创建 web.config 文件?

编辑:我正在尝试通过 Octopus 部署应用程序,所以我复制了 bin 文件夹的内容,我还需要 web.config。 所以暂时我在项目中手动创建了web.config然后build项目。 所以它将 web.config 复制到 bin 文件夹。 那么这是正确的方法吗? 或者有什么方法可以在 bin 文件夹中生成 web.config 而无需手动创建它?

据我所知,web.config 用于告诉 IIS 如何使用 asp.net 核心模块和处理程序来托管 asp.net 核心应用程序。 当您在 VS 中构建和测试应用程序时,无需创建 web.config,因为它会读取launchSettings.json而不是 web.config。

Web.config为服务器配置文件,用于配置ASP.NET核心模块。

web.config 文件可以提供额外的 IIS 配置设置,用于控制活动的 IIS 模块。 有关能够使用 ASP.NET 核心应用程序处理请求的 IIS 模块的信息,请参阅IIS 模块主题。

Asp.net core web.config内容(没有这个文件,我们无法直接在IIS上托管asp.net core应用)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\basket.api.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout">
           </aspNetCore>
    </system.webServer>
  </location>
</configuration>

IIS 需要一个 web.config 文件用于在那里运行的应用程序。

在 ASP.NET Core 中,web.config 是惰性生成的。 假设(有缺陷,IMO)是你不需要 web.config 直到你准备好发布到 IIS。但是如果你有你的 IIS 应用程序指向你的本地代码实例,这样你就不必重新发布你的每次更改代码并想在 IIS 中测试它时应用程序? 或者,如果像 OP 一样,您想使用替代部署方法怎么办?

在这种情况下的解决方法是发布一次您的应用程序,获取生成的 web.config,并将其复制到您的 VS 项目的根目录(与 bin 文件夹相同级别)。 随后的构建会将 web.config 复制到 bin\debug.net6.0。 仍然不理想,但这比手动创建 web.config 并可能在文件中引入错误要好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM