【问题标题】:Is it at all possible to migrate ASP.NET ASPX solution to ASP.NET Core 2.0?是否可以将 ASP.NET ASPX 解决方案迁移到 ASP.NET Core 2.0?
【发布时间】:2018-03-19 08:27:20
【问题描述】:

我想将我的 asp.net(UI ASPX 页面 WebForms)应用程序迁移到 ASP.NET Core 2。通过一些搜索,我发现 .net 核心不支持 aspx。如果这是真的(任何人都有这方面的确切文档吗?)任何人应该如何从纯 asp.net aspx 项目转换为 asp.net core 2.0?

我使用了便携式分析器工具,但只提供每个 .dll 文件并获取更令人困惑的报告是令人困惑的。

如果可能,请提供有效的 Microsoft 文档。

【问题讨论】:

  • 不可能,因为.NET Core不支持WebForms,只支持MVC。获取并使用此信息。如果您需要官方文档,您可以自行查找。这就是搜索引擎的用途。如果你在那里找不到东西,为什么不联系 MS 并寻求权威答案?
  • @Sefe 我知道我们得到的每个文档微软仍然完全支持 webforms,但不支持 .net 核心。所以如果我无论如何都想做,那我该怎么做......
  • 无论如何你不能这样做。这就是微软所说的但不是在 .NET Core 中的意思。你找到的文件说他们所说的有一个原因:他们描述了一个现实。您是否愿意接受这一现实完全取决于您。

标签: c# asp.net asp.net-core webforms


【解决方案1】:

这完全取决于您所说的“迁移”是什么意思。正如您问题的 cmets 中所述,ASP.NET Core 不支持 Web 表单,因此无法自动将 Web Forms 网站转换为 ASP.NET Core 网站。

也就是说,可以进行迁移。我一直在为一个非常大的基于 Web 表单的网站做这件事,我想将它转换为 ASP.NET Core。如果您是认真的,那么这里有一些信息可能会对您有所帮助。

ASP.NET Core 的一般架构基于 MVC,因此它与 ASP.NET MVC 的相似性远高于 ASP.NET Web 窗体。因此,您最终将使用 MVC 模式的一些派生来重写几乎所有的 UI 代码。您将使用布局而不是母版页。您将使用标签助手而不是服务器控件。您将使用局部控件和视图组件,而不是用户控件。您将使用控制器和视图模型,而不是代码背后。等等。

值得注意的是,仍然存在http上下文对象、请求对象和响应对象,它们与Web表单中的类比对象极为相似。所以这有助于转换。

此外,为了简化转换过程,您可以构建一个面向完整框架的 ASP.NET Core Web 应用程序。这意味着您将可以访问您在完整框架中使用的大部分内容,除了 System.Web 命名空间中的任何内容。以完整框架为目标确实意味着您的新网站只能在 Windows 上运行。但是,如果您可以忍受(至少目前如此),那么转换过程对您来说会更容易。

如果您在旧网站中将一堆功能分解为类库,那将使您的生活更轻松。您应该能够将这些类库原封不动地带到新网站并从 ASP.NET Core 网站引用它们,如果它们不引用 System.Web,它们很可能会正常工作。任何引用 System.Web 的代码都需要修改以使用新的类似对象或 UI 方法。

所以最终,您可能能够轻松地引入您的数据模型、数据访问代码、业务对象和业务逻辑。但您将不得不完全重写您的 UI 相关代码。这就是我正在进行的旅程,它并不像你想象的那么难,至少在你一开始就熟悉 ASP.NET Core 时不会如此。去拿他们!

【讨论】:

  • 非常感谢您提供出色的描述性答案。你正确地理解我现在所面临的。我们的最终目标是在 Linux 服务器上运行 ASP.NET 应用程序。到目前为止,根据我的理解,有两种方法可以做到这一点,将当前应用程序转换为 MVC 并迁移到 ASP.NET 核心或直接开始使用 MVC 模式迁移到 ASP.NET 核心。
  • 我会认真考虑直接使用 ASP.NET Core,因为 TagHelpers 在 ASP.NET MVC 中不存在,但它们在 ASP.NET CORE MVC 中存在,您最终可能会使用它们很多在最后的项目。 (但是您可以通过在现有项目中对 MVC 进行一些微转换来了解 MVC。)此外,如果最终目标是 Linux,则可能仍然值得将完整框架作为中间步骤,但最终您将需要以 .Net Core 为目标并进行任何剩余的转换才能到达那里。
  • 正中目标!!!所以为了我的目标,我应该开始将应用程序迁移到 asp.net core MVC,中间步骤 Full framework 作为目标框架,然后将其更改为 asp.net core 进行相应的更改。看起来不错的计划...谢谢
  • 您应该研究的另一件事是 ASP.NET Core 中的 RazorPages。从技术上讲,它仍然是 MVC 的衍生物,但结构与 WebForms 有相似之处。使用标准 MVC 方法,控制器、视图模型和视图分别位于单独的文件夹中。但是对于 Razor 页面,控制器和视图模型合并在一个 .cs 文件中,并且该 .cs 文件位于视图的同一文件夹中。所以结构有点类似于WebForms。我使用我自己的自定义版本(我在 RazorPages 发布之前创建的),因为它使将代码从 WebForm 应用程序移动到 Core 变得更加容易。
  • 我会仔细研究自定义标签助手。如果您像我一样,您已经编写了大量“代码隐藏”来修改“文本框”。您的文本框现在当然是“输入”。您可以编写标签助手来模仿您在代码隐藏中可能遇到的行为,例如接受小数、插入逗号、向右对齐、添加掩码等。您自己的自定义标签助手可以使这项工作变得更容易。
【解决方案2】:

我发现an article 声称这是可能的。 如您所知,立即将整个项目从 WebForm 迁移到 .Net Core 并不容易。那么,如果我能够让我的 web 表单页面在生产中工作,同时开始逐步转换页面呢?我的意思是在同一个项目中有两种方法的组合。

这是一个名为DotVVM 的开源提出的想法。您拥有 ASP.Net 网页表单页面,只需通过 Nuget 安装 DotVVM。 DotVVM 支持这两种方法。 DotVVM 包含类似的控件,如 GridView、Repeater、FileUpload 等,但您需要了解 DotVVM 语法。

DotVVM 可以与其他 ASP.NET 框架(Web 窗体、MVC、Razor 页面)并行运行

它声称:

如果业务层分离得当,重写一页平均需要1小时左右。

几个月后(如果您的项目很大),当所有 ASPX 页面都在 DotVVM 中重写时,您将能够创建一个新的 ASP.NET Core 项目,将所有 DotVVM 页面和视图模型移动到其中并使用它们使用 .NET 核心。 DotVVM 的语法在两个平台上是相同的。

Here您可以看到迁移所需的五个步骤。

【讨论】:

    【解决方案3】:

    您可以传输您所有的业务逻辑、模型甚至一些控制器方法(您只需将那些 ActionResult 调整为 IActionResult)。如果您使用的是 Ninject(用于 ASP.NET Framework IOS),您只需将它们注册到您的 Startup.cs。基本上,我想说的是,您需要在 .NET Core 下创建一个新应用程序。这将是实际项目解决方案的变化,但您的实际业务流程不会有所不同。希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-26
      • 2019-11-12
      • 1970-01-01
      • 2021-06-04
      • 2018-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多