【问题标题】:How to migrate .NET Framework 4.7.2 project to .NET Core 3.0 in Visual Studio 2019如何在 Visual Studio 2019 中将 .NET Framework 4.7.2 项目迁移到 .NET Core 3.0
【发布时间】:2020-01-23 20:26:33
【问题描述】:

我有一个面向 .NET Framework 4.7.2 的 Windows 窗体应用程序。由于 .NET Core 3.0 支持 Windows 窗体,我想尝试一下。有没有办法将 VS2019 项目从 .NET Framework 转换为 .NET Core,或者唯一可能的方法是创建一个新的 .NET Core 项目并从旧项目添加文件?

我只询问 VS 项目迁移,而不是任何潜在的不兼容问题。

【问题讨论】:

  • 如今天的 .NET Conf 视频所示(查看当前在 dotnetconf.net 上运行的直播,倒回到 1:27-1:28 左右(1 小时 + 27-28 分钟)视频和观看),有一个名为“try-convert”的新工具可以尝试为您进行转换。如何安装此工具,从何处获取,我不知道,但如果您安装了 Visual Studio 2019 和 .NET Core 3 SDK,这可能很明显,这就是为什么我将此作为评论而不是答案的原因。
  • docs.microsoft.com/en-us/dotnet/core/porting/winforms。需要注意的是,winform 设计人员还不支持 .NET Core,因此您可能还想查看最新的 VS 2019 Preview drop。
  • Olia Gavrysh(做演示的女士)说他们将在明天 - 7 小时前发布它:)我会尽快粘贴链接。
  • 测试 Winform 迁移 .Net Core 3.0 以供将来升级可能会很有趣,但我不建议在已经必须在生产环境中顺利运行的大型应用程序上使用它。即使是出于测试目的,如果您不着急,至少等待几周所需工具的官方可用性,它会更容易。
  • @LasseVågsætherKarlsen 我有带有 .NET Core 3 的 Visual Studio 2019,但磁盘上没有这样的文件。我认为他们甚至说工具不是 100% 成功的,它不会成为官方 VS 安装的一部分。

标签: .net visual-studio .net-core visual-studio-2019


【解决方案1】:

[EDIT]官方工具发布:try-convert

查看releases 了解最新版本。

在官方工具发布之前,这里有一些人提供的链接Migration-von-NET-Framework-zu-NET-Core-per-PowerShell

【讨论】:

  • try-convert 不是官方工具。他们写道:“不以任何方式支持此工具”和“这是 .NET 团队成员在业余时间构建的开源项目”
  • 框架从net20升级到net47的命令是什么?
  • 出现错误,因为“app.csproj 包含对 System.Web 的引用,.NET Core 不支持该引用。在应用命令时,您可能需要完成大量工作才能完全移植此项目” try-convert -w app.csproj" 我们在做什么,这可能是迁移的力量吗?
【解决方案2】:

请按照以下步骤操作:

使用可移植性分析器

使用以下说明运行 Portability Analyzer。

1.运行 PortabilityAnalyzer.exe (https://github.com/Microsoft/dotnet-apiport-ui/releases/download/1.1/PortabilityAnalyzer.zip)

2.在“应用程序路径”文本框中输入 Windows 窗体的目录路径或 WPF 应用程序(通过插入路径字符串或单击浏览按钮并导航 到文件夹)。

3.点击分析按钮。

4.分析完成后,报告您的应用现在对 .NET 的可移植性 Core 3.0 将保存到您的光盘中。您可以通过单击打开报告在 Excel 中打开它 按钮。

NET 可移植性分析器以确定您的应用程序所依赖的任何 API 是否从 .NET Core 中丢失。如果有,您需要重构代码以避免依赖于 .NET Core 中不支持的 API。有时可以找到提供所需功能的替代 API。

迁移

1. 将 packages.config 替换为 PackageReference。如果您的项目使用 NuGet 包,您 需要将相同的 NuGet 包添加到新的 .NET Core 项目中。 .NET 核心项目 仅支持用于添加 NuGet 包的 PackageReference。移动 NuGet 引用 从 packages.config 到您的项目文件,在解决方案资源管理器中右键单击 packages.config -> 将 packages.config 迁移到 PackageReference…..

2.迁移到 SDK 样式的 .csproj 文件。要将我的应用程序迁移到 .NET Core,首先我需要将项目文件更改为 SDK 样式格式,因为旧格式不支持 .NET Core。此外,SDK 样式的格式更精简且更易于使用。确保您拥有当前 .csproj 文件的副本。将 .csproj 文件的内容替换为以下内容。

对于 WinForms 应用程序:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net472</TargetFramework>
    <UseWindowsForms>true</UseWindowsForms>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  </PropertyGroup>
</Project>

对于 WPF 应用程序

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net472</TargetFramework>
    <UseWPF>true</UseWPF>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  </PropertyGroup>
</Project>

3.从 .NET Framework 迁移到 .NET Standard 或 .NET Core。为此,请替换此

<TargetFramework>net472</TargetFramework>

<TargetFramework>netstandard2.0</TargetFramework>

<TargetFramework>netcoreapp3.0</TargetFramework>

4.在项目文件中复制旧项目中的所有外部引用,使用旧csproj文件relpace this找到proejct引用。例如:

<PackageReference Include="Newtonsoft.Json" Version="9.0.1" />

到 .csproj 文件

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <UseWPF>true</UseWPF>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  </PropertyGroup>
</Project>

<ItemGroup>
     <PackageReference Include="Newtonsoft.Json" Version="9.0.1" />
</ItemGroup>

【讨论】:

  • 换句话说,从 .Net Framework 转换到 .Net Core 就像把香蕉变成福特福克斯一样简单
  • 工作正常。还将 Microsoft.NET.Sdk 更改为 Microsoft.NET.Sdk.WindowsDesktop
【解决方案3】:

Microsoft 发布了一个新的Upgrade Assistant 工具,可将您的 .NET Framework 项目迁移到 .NET 5。迁移后,您可以将 csproj 文件中的 TargetFramework 更改为您想要的任何 .NET 版本。

我运行了以下命令来安装该工具:

dotnet tool install -g try-convert
dotnet tool install -g upgrade-assistant

然后使用它:

upgrade-assistant .\MyProject.csproj

【讨论】:

    【解决方案4】:

    也许在某些情况下,残酷的强制迁移(在 OP 中提到)确实是最简单的,尤其是当存在工具无法自动处理的 3rd 方库时。

    我的 Winforms(.NET 4.6.2 with VS2019)示例:

    (1)新建VS2019 .net core 3.0 WinForm项目。

    (2) 将旧项目中除.csproj和.csproj.user之外的所有文件复制覆盖到新项目文件夹中。

    (3) VS2019 以某种方式自动将所有复制的文件添加到新项目中(在这种情况下,需要手动删除旧项目中未包含的某些文件)。如果没有,请将它们添加到项目中。

    (4) 根据新项目中的错误,添加缺失的引用。

    (5)MySql.Data.MySqlClient -> MySqlConnector等部分代码需要手动修改。

    (6) 升级到 VS2019 16.8 以支持带有 .NET core 的表单编辑器。

    【讨论】:

      猜你喜欢
      • 2021-10-03
      • 1970-01-01
      • 2023-01-30
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多