【发布时间】:2021-12-02 00:08:46
【问题描述】:
对于不同的部署环境,我们希望通过 IIS 或通过 Windows 服务发布我们的应用程序。
从这个thread 中我们了解到,我们必须从Program.cs -> CreateHostBuilder() -> ConfigureWebHostDefaults() 中删除另一个UseABC() 选项。
要明确一点:UseIIS() 或 UseKestrel() 应该在那里启用(事实上,最后一个获胜,但这不是重点)。
是这个吗?
没有比创建两个不同的部署包更好的选择吗?
理想情况下,应该有一组二进制文件同时支持 IIS 和 Windows 服务作为托管环境。有什么想法吗?
【问题讨论】:
-
为什么?对于 Kestrel 与 IIS,您需要 2 个不同的包和 2 个不同的源代码(例如,Kestrel 不使用 web.config,而 IIS 需要它,并且正如您所见,您需要不同的中间件,具体取决于要使用的服务器)。您还应该真正考虑这种方法,您可以根据服务器找到不同的行为,这会使调试错误变得更加复杂
-
web.config文件也会自动为红隼部署创建。我没有尝试删除它,但它也不疼。所以代码中唯一的变化是选择目标环境的这一行。如果除了切换这条线别无其他方法 - 好的。但除此之外 - 目前 - 没有必要更改任何其他内容...... -
我从来没有这样做过,但也许这有帮助? stackoverflow.com/questions/42272021/… - 自从我在 2016 年开始研究 ASP.NET Core 以来,我很幸运几乎不用担心 IIS :)
-
@CamiloTerevinto 感谢您的链接;但是那里的信息已经过时了,就像以前在 IIS 中托管时一样,内部也使用了 Kestrel - 因此它被称为
UseIISIntegration()。自从 net core 3 以来,这种情况现在发生了变化。? -
我建议您在新应用中尝试一下,因为老实说,我看不出投票最多的答案会如何在版本之间发生变化。 IIS 在启动应用程序时很可能仍会设置这些环境变量。
标签: c# asp.net-core iis windows-services