【问题标题】:Migrating .NET Framework 4.6.2 to .NET Standard 2.0 [closed]将 .NET Framework 4.6.2 迁移到 .NET Standard 2.0 [关闭]
【发布时间】:2019-11-06 06:56:53
【问题描述】:

我们有一组在 .NET Framework 4.6.2 下创建的类库,我们希望将这些库迁移到 .NET Core 2.0 或 .NET Standard 2.0

我们有以下几种方式,

  • 创建一个新项目并复制代码。
  • 通过编辑 CSPROJ 文件转换现有项目。

哪个更好地迁移库,以及 .NET Standard 对 .NET 核心性能的影响。

是否有其他方法可以迁移这些集合。

【问题讨论】:

  • 嗨。由于您描述的两种方式都可以让您做您所要求的事情,因此我投票决定主要基于意见来结束此操作。你可以做任何一个,它们都有其优点和缺点,但最终你应该能够通过这两种方法完成你的任务。

标签: .net-core .net-standard


【解决方案1】:

我认为对 .NET Standard 2.0 的实际含义可能存在误解。

.NET Standard 旨在创建一个跨多个不同实现 .NET 的通用 API 界面

这些实现包括 .NET Framework、Mono、.NET Core 等。从这个意义上说 - .NET Core 是 .NET 的一个版本,.NET Standard 和 .NET Core 之间没有任何联系。

如果您创建一个 .NET Standard 库,它基本上是平台无关,这意味着它可以在任何支持您的 .NET Standard 版本的.NET 实现上运行正在瞄准。这意味着如果您将现有的 .NET Framework 4.6.2 库升级到 .NET Standard,您只能获得该库的可移植性,但如果您仍然在面向 .NET Framework 的应用程序中使用该库,您将不会看到任何性能提升,因为该库仍将针对相同的 .NET Framework 运行。

如果您将整个应用程序本身移植到 .NET Core(在 3.0 发布后会更容易),您肯定会看到性能提升,因为您的库随后将在 .NET Core 上运行。

至于移植 - 通常最简单的方法是创建一个空库并将现有类手动复制到新库,然后安装所有必需的 NuGet 包。

【讨论】:

  • 假设 OP 知道这一切,这个答案并不能回答所提出的问题。
  • 从问题来看,OP 似乎并不知道区别——即使使用 NET Core Standard 与 NET Core 的名称——这两件事也没有可比性——一个是 API 接口,一个是平台。答案也回应了迁移问题。我不确定缺少什么:-)
  • 这没有回答问题。 “这意味着如果您将现有的 .NET Framework 4.6.2 库升级到 .NET Standard,您只能获得该库的可移植性”。是的,这就是这个问题所要寻找的。​​span>
  • @ThomasBoby 对不起,但在这方面我必须不同意你的看法。问题询问是否将库移植到 .NET Core 与 .NET Core Standard,在这两者中,第二个选项根本不存在,所以我认为有必要首先澄清这个误解。这是必要的,以表明性能增益实际上是由库将在其中使用的运行时决定的 - 因为对于核心库,性能增益是自动的,但对于标准库是有条件的。
  • @MartinZikmund 好吧,让我们将问题改为关于迁移到 .NET Core 和 .NET Standard,这是一个非常有价值的问题,目前还没有答案。我的理解是,使用 .NET 标准构建的类库可能会出现性能问题(例如,您不能使用来自 netstandard2.1 或 netcoreapp3.0 中的 API 的上游性能改进)
【解决方案2】:

除了@Martin 的回答,要将现有的 .NET Framework 应用程序迁移到 .NET Core,您可以先从 portablility analyzer tool 开始。此工具是 Visual Studio 扩展,可详细报告您的应用程序的灵活性。

将现有项目迁移到 .NET Core 是一个过程,可能需要一些时间,具体取决于解决方案的性质。该工具在确定项目状态时非常有用。 如果您只针对 .NET 框架 4.6.2,迁移应该相对简单。你可以这样做:

  1. 创建新的 .NET SDK 样式项目

  2. 编辑新项目的csproj文件,将目标框架改为net462。

<PropertyGroup> <TargetFramework>net462</TargetFramework> </PropertyGroup>

  1. 将文件从旧项目移动到新项目。

  2. 删除旧项目并更新引用

  3. 对所有类库重复步骤

我建议从具有最少依赖关系的类库开始,测试更改并在转换所有简单的类库后转向更复杂的类库。

【讨论】:

  • 谢谢,但是如果我们以 net462 为目标,即使我们迁移到 .NET Core,它也只会指向 .NET 框架。所以,我将 .NET Framework 迁移到 Core 的主要动机是性能提升,但是如果我们仍然在核心应用程序中指向 net462,性能会不会有任何提升或损失?
  • 要迁移到 .NET 核心,我建议先使用分析器工具,然后查看应用程序的兼容性。其余步骤仍可保持不变。如果您的应用程序 100% 兼容,您可以选择目标为 netcoreapp2.0(或现在为 netcoreapp2.1)。否则,将项目转换为新样式但保持目标为net62,将所有不兼容的代码转换为.net core,然后将目标框架更改为.netcore
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
相关资源
最近更新 更多