一个自托管的Razor Web应用程序在Kestrel上运行的.NET Core应用程序能否在完整的.NET上运行并引用system.web?

3

这个思路始于这个帖子

我们正在做什么:

  • 将一个庞大的asp.net应用程序转换成razor(数百个页面和模板)

    -- 这部分已完成

我们接下来想要做的事情:在kestrel中自托管网站

问题是:此应用程序使用了许多需要在Windows上使用完整.NET Framework的第三方库,包括对system.web的大量引用。

这篇文章的评论中,指出可以在完整的.NET Framework上运行.NET Core项目。

如果是真的,那么这个.NET Core项目,它将使用kestrel进行自托管,是否也可以包含使用system.web的完整的“旧”的.NET 4.6程序集?


在.NET Framework上运行ASP.NET Core应用程序仅支持非常有限的场景,您可以使用特定的一组旧程序集(如ADP.NET提供程序等)。我认为依赖于System.Web(又名ASP.NET 4.x)的程序集无法以这种方式使用,因为ASP.NET Core本身具有不同的编程模型,许多东西很容易出错。再次确认每个程序集(您没有展示它们是什么)。 - Lex Li
大多数甚至所有的asp.net核心库都针对.NET标准,而不是.NET核心。这意味着它们可以被针对.NET Core、完整的.NET框架或任何支持.NET标准api集的应用程序使用,没有任何问题。因此,如果你只在Windows上运行 - 就使用完整的.NET框架即可。 - Evk
1个回答

3
在这篇文章的评论中,提到了一个错误的想法:在完整的.NET Framework上运行.NET Core项目。这是错误的。它要么是.NET Core,要么是.NET Framework。你可以在.NET Framework或.NET Core上托管ASP.NET Core,但那是另一回事。
如果这是真的,那么这个将使用kestrel自托管的.NET Core项目,也可以包含使用system.web的全面的“旧”的.NET 4.6程序集吗?
不,你不能这样做,因为这是不正确的。然而,你可以在.NET Framework 4.6上运行一个ASP.NET Core应用程序,使用System.Web引用,但这有很多限制;例如,你不能在ASP.NET Core上运行ASP.NET OWIN流水线。这完全取决于你需要使用System.Web及其相关程序集的具体内容。
但请让我尽可能清楚地表达:.NET Core != ASP.NET Core

"然而,您可以在.NET Framework 4.6上运行的ASP.NET Core应用程序中使用System.Web引用。但我对此表示怀疑,应该逐个案例进行验证。" - Lex Li
@LexLi,我希望这次修改能够更清楚地表达我的意思。 - Camilo Terevinto
Camilo,非常感谢你。我认为这个领域需要在某个地方详细说明。我对你有一个问题:如果我可以在.NET Framework 4.6上运行ASP.NET Core应用程序,那么这个ASP.NET Core应用程序是否可以:在Kestrel中自主托管(例如没有IIS)并包含旧版.NET程序集(理解因为没有IIS,无法访问IIS消息管道、OWIN和其他方面)? - Jonesome Reinstate Monica
@Jonesome 是的,这就是我的答案意思。不确定什么具体方法会起作用,什么不会,可能需要一些试错。 - Camilo Terevinto
@CamiloTerevinto 再次感谢您。我们知道我们即将进入试错的领域......但首先我们必须到达目的地。感谢您指路! - Jonesome Reinstate Monica
@Jonesome 您好,如果这个回答对您有帮助,请记得将其标记为已接受的答案 :) https://stackoverflow.com/help/someone-answers - Camilo Terevinto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接