web.config 未为迁移的(project.json -> .csproj)asp.net 核心应用程序生成

web.config not being generated for migrated (project.json -> .csproj) asp.net core application

背景

我们有一个 ASP.NET 核心应用程序,在每个 push/merge 进入 githup 上的 master 时,都会构建并部署到应用程序上的开发插槽Azure 中的服务。此应用程序是使用 Visual Studio 代码使用 project.json 文件构建的。我们最近将其迁移到 Visual Studio 2017(使用 dotnet migrate)。迁移保持我们的 web.config 文件原样,并将我们的预发布脚本迁移到 .csproj 文件,但没有带来 post-发布脚本 运行 dotnet publish-iis.因此,web.config 文件未更新以将 %LAUNCHER_*% 占位符替换为与 Azure 部署相关的值。

为了弄清楚 web.config 在这个新的 .csproj 世界中应该是什么样子,我们创建了一个 b运行d-new dotnet 项目(使用 Visual Studio 2017,而不是 dotnet new) 去看看web.config,但是实际上并没有创建上用的项目。然而,部署后服务器的web根目录中神奇地出现了一个

我们试图摆脱我们的 web.config,但它并没有导致它生成。我们将我们项目中的所有内容与新项目进行了比较,但找不到任何看起来像是在触发它(在新项目中)或阻止它(在我们的旧项目中)的东西。我们在整个网络上搜索了触发 web.config 自动生成的原因,但一无所获。

我们目前所在的位置

我们意识到我们可以用实际值替换 %LAUNCHER_*% 占位符并让它工作,但如果我们能让我们的项目像新创建的一样神奇地生成 web.config ,那将是更好的选择项目做。

提问

因此我们的问题是,如何使 web.config 像新创建的项目一样在构建或部署时生成?

web.config代是csproj项目使用的"Web SDK"代的一部分。如果项目文件以

开头
<Project Sdk="Microsoft.NET.Sdk.Web">

它会自动获取web.config转换逻辑。 dotnet publish-iis 步骤不再是必需的。如果您没有直接在项目中包含任何 asp.net 核心 nuget 包,迁移可能无法注意到您的项目实际上是一个 Web 项目(或者可能存在错误)。

另一个可以抑制web.config的设置是

<IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>

在 csproj 文件中。