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

Dav*_*ker 2 c# web-config azure asp.net-core visual-studio-2017

背景

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

为了弄清楚 web.config 在这个新的 .csproj 世界中的外观,我们创建了一个全新的 dotnet 项目(使用 Visual Studio 2017,而不是dotnet new)来查看 web.config,但它实际上并没有在与项目。然而,在部署后,一个神奇的出现在服务器的 web 根目录中。

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

我们目前在哪里

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

问

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

Mar*_*ich 5

web.config 生成是 csproj 项目使用的“Web SDK”的一部分。如果项目文件以

<Project Sdk="Microsoft.NET.Sdk.Web">
Run Code Online (Sandbox Code Playgroud)

它将自动获取 web.config 转换逻辑。dotnet publish-iis不再需要该步骤。如果你没有直接在项目中包含任何asp.net core nuget包,迁移可能没有注意到你的项目实际上是一个web项目(或者可能有bug)。

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

<IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
Run Code Online (Sandbox Code Playgroud)

在 csproj 文件中。