背景
我们有一个 ASP.NET Core 应用程序,每次推送/合并到 githup 上的 master 时,都会构建该应用程序并将其部署到 Azure 应用服务上的开发槽中。此应用程序是通过 Visual Studio Code 使用 project.json 文件构建的。我们最近将其迁移到 Visual Studio 2017(使用 dotnet migrate
)。迁移保持了 web.config 文件原样,并将预发布脚本迁移到 .csproj 文件,但没有引入运行 dotnetpublish-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?
最佳答案
web.config 生成是 csproj 项目使用的“Web SDK”的一部分。如果项目文件以
开头<Project Sdk="Microsoft.NET.Sdk.Web">
它会自动获取web.config转换逻辑。不再需要 dotnetpublish-iis
步骤。如果您没有在项目中直接包含任何asp.net core nuget包,则迁移可能无法注意到您的项目实际上是一个Web项目(或者可能存在错误)。
另一个可以抑制 web.config 的设置是
<IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
在 csproj 文件内。
关于c# - 未为迁移的 (project.json -> .csproj) asp.net core 应用程序生成 web.config,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44145026/