【问题标题】:Convert .Net Framework 4.6.2 project to .Net core project将 .Net Framework 4.6.2 项目转换为 .Net 核心项目
【发布时间】:2018-01-02 08:01:59
【问题描述】:

我有一个解决方案,其中包含由 .Net 框架 4.6.2 开发的一堆类库。我必须将这些类库转换为 .Net 核心。有没有最好最快的转换方法来改写代码。

【问题讨论】:

  • 我试图通过右键单击项目 -> 属性 -> 目标框架将 .net 框架 4.6.2 更改为 .Net 核心,但我没有找到 .Net 核心。而如果我创建新项目,则可以在 Target 框架中看到 .Net 核心
  • 如果这些是库,你应该升级到 .net 标准而不是 .net 核心

标签: .net-core .net-framework-version


【解决方案1】:

This 似乎是用于进行迁移的官方 Microsoft 资源。总结如下:

  1. (推荐) 重新定位您希望移植的所有项目以定位到 .NET Framework 4.7.2 或更高版本。

  2. (推荐)使用 .NET 可移植性分析器分析您的程序集并查看它们是否可移植到 .NET Core。

  3. (推荐) 将 .NET API 分析器安装到您的项目中,以识别在某些平台上引发 PlatformNotSupportedException 的 API 以及其他一些潜在的兼容性问题。

  4. 使用 conversion tool in Visual Studio 将所有 packages.config 依赖项转换为 PackageReference 格式。

  5. 为 .NET Core 创建新项目并复制源文件,或尝试使用工具转换现有项目文件。

  6. 移植您的测试代码。

【讨论】:

【解决方案2】:

大部分 BCL 在 API 方面仍然是相同的,因此转换绝对是可行的考虑。是的,您的代码中可能存在不兼容(或者更常见的是 - 与您的依赖项),最简单的检查方法是尝试使用 .net core 构建它。

有关何时转换(以及何时重写)或有关执行转换的选项的更多详细信息,您可以遵循本指南:Upgrading to .NET Core and .NET Standard Made Easy

【讨论】:

  • “没有工作”不是别人可以帮助你的。检查(stackoverflow.com/help/mcve)。
  • 我同意@ImrePühvel。简单地说“它不起作用”并不能提供足够的信息。 OP 没有提供任何关于它为什么不起作用或他们尝试了什么的信息。没有这些信息,就很难帮助 OP
  • 我试图在该博客中提到的项目文件中将目标框架从 v4.6.2 更改为 netcoreapp2.0。但是项目没有加载,它被抛出错误对话框,因为无法评估。输入字符串的格式不正确等。
  • 自该指南编写以来,细节可能已经发生了变化。适应。创建一个与您的目标固件匹配的新空项目,并比较项目文件的构建方式以及这些天使用的确切值。一般准则应该仍然有效。
【解决方案3】:

将 .net 框架项目切换到 .netcore 项目的最简单方法是打开 csproj 文件并将 TargetFramework 更改为类似这样的内容

<TargetFramework>net462</TargetFramework>

这样的事情

<TargetFramework>netcoreapp3.1</TargetFramework>

您也可以将其更改为 .net 标准,以防您希望 .net 核心和 .net 框架使用者项目之间的兼容性,将其更改为:

<TargetFramework>netstandard2.0</TargetFramework>

您可以像这样针对多个框架:

<TargetFrameworks>net462;netstandard2.0</TargetFrameworks> 

确保您使用正确的版本号,并且显然取决于该项目已经针对的目标,事情将会中断并且需要修复。例如,您不能将 .net 框架类库与 .net 核心项目一起使用。

这里提供了更详细的过程: https://docs.microsoft.com/en-us/dotnet/core/porting/

【讨论】:

    【解决方案4】:

    当我尝试将 CLI 项目从 .NET Framework 迁移到 netcoreapp3.1 时,我遇到了与您看到的相同的错误(根据 your comment to @ImrePühvel):

    “无法评估表达式“[Microsoft.Build.Utilities.ToolLocationHelper]::GetPathToStandardLibraries(_, netcoreapp3.1, '', x64, '', '')”。输入字符串的格式不正确.C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets"

    就我而言,这是由于误读了说明。

    旧框架有一个标签:

    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    

    这需要改成:

    <TargetFramework>netcoreapp3.1</TargetFramework>
    

    不是

    <TargetFrameworkVersion>netcoreapp3.1</TargetFrameworkVersion>
    

    我只是在 TargetFrameworkVersion 标签中更改了 v4.5 --> netcoreapp3.1,而没有将标签名称更改为 TargetFramework

    所以仔细检查你是否改变了:

    <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
    

    <TargetFramework>netcoreapp3.1</TargetFramework>
    

    (或您想要的任何 .NET Core 版本)

    而不是:

    <TargetFrameworkVersion>netcoreapp3.1</TargetFrameworkVersion>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 2020-05-24
      相关资源
      最近更新 更多