将 .NET Core 2.0 class 库转换为 .NET Standard

Convert .NET Core 2.0 class libraries to .NET Standard

有没有办法轻松地将面向 .NET Core 2.0 的 class 库转换为 .NET Standard?

如果我理解正确,如果想在针对不同 .NET 框架的项目中最大化 class 库的可重用性,例如.NET Framework、.NET Core、Xamarin 等,以 .NET Standard 为目标是一个更好的主意——前提是所有必需的 API 都在将作为目标的 .NET Standard 版本中可用。

这就是我想要将我的 class 库从 .NET Core 2.0 转换为 .NET Standard 1.6 或 .NET Standard 2.0 的原因。

您可以编辑 csproj 文件(可以在 VS 中通过右键单击项目文件来完成)并更改

<TargetFramework>netcoreapp2.0</TargetFramework>

<TargetFramework>netstandard2.0</TargetFramework>

在项目文件中,您可以将目标编译指向具有确切版本的netstandard

Proj.csproj 示例:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard1.6</TargetFramework>
  </PropertyGroup>
</Project>
...

Microsoft 提供了很好的documentation 定位类型。

Dotnet Standard 不是一个框架或库,它是一组抽象的指令:什么功能应该有System.ArrayStringList,等等。目前,有 different implementations:.NET Framework、.NET Core、Mono、Xamarin、WindowsPhone。这意味着不同的实现可以重新编译和重用您的库目标 netstandard。这是一个非常好的 NuGet 包选择。

您可以尝试这些版本并找到您的库所需的最小功能集。每个 Dotnet 标准都扩展了以前版本的功能。因此,选择的目标版本越少,您的库支持的平台就越多。

  1. 转到项目文件夹
  2. 打开 .csproj 文件
  3. 替换你的目标框架

    netcoreapp2.2netstandard2.0

看这张图更清楚

我对这个话题的五分钱。我必须转换已经用 .Net Core 3.1 和 5.0 编写的库。当您打开解决方案或将项目添加到当前的 .Net Standard 解决方案时,它不会显示 .Net Standard 选项列表。 原因是您有 2 个参考更新以使其工作。首先,更改 .csproj 文件中的目标框架。例如,要切换到 .Net Standard 2.1,我按以下方式修改了文件:

  <PropertyGroup>
    <TargetFramework>netstandard2.1</TargetFramework>
  </PropertyGroup>

其次,更改解决方案(.sln 文件)中的项目类型引用,用任何编辑器打开它,否则它也不会识别它。 .Net Standard 2.1 的 GUID 是 9A19103F-16F7-4668-BE54-9A1E7A4F7556。如果您有不同版本的标准,技巧是添加一个新项目,检查项目类型的 GUID 并在解决方案文件中替换它。

EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = ...
EndProject