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

Posted

技术标签:

【中文标题】将 .NET Core 2.0 类库转换为 .NET Standard【英文标题】:Convert .NET Core 2.0 class libraries to .NET Standard 【发布时间】:2017-09-07 04:00:53 【问题描述】:

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

如果我理解正确,如果想在针对不同 .NET 框架的项目中最大限度地提高类库的可重用性,例如.NET Framework、.NET Core、Xamarin 等,最好以 .NET Standard 为目标——前提是所有必需的 API 在目标 .NET Standard 版本中可用。

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

【问题讨论】:

【参考方案1】:

在项目文件中,你可以将目标编译指向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、Windows Phone。这意味着不同的实现可以重新编译和重用你的库以netstandard为目标。对于 NuGet 包来说,这是一个非常好的选择。

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

【讨论】:

虽然 .Net Standard 不是框架,但您仍然在 project.csproj 文件的 标记或项目的 Properties -> "Target Framework" 下拉框中设置它。命名很难!【参考方案2】:

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

<TargetFramework>netcoreapp2.0</TargetFramework>

<TargetFramework>netstandard2.0</TargetFramework>

【讨论】:

包 Microsoft.AspNetCore.All 2.0.0 支持:netcoreapp2.0 (.NETCoreApp,Version=v2.0) 在我删除包引用后,它说找不到静态主方法 嗯,它起作用了,但它引起了更多问题,比原来的警告更糟糕:D。顺便说一句,我相信我的 .net 核心应用程序是 2.1 而不是 2.0,即“netcoreapp2.1”。 从.net标准转换为.net核心时有效 我这样做了,在此更改之后,“属性”中的“目标框架”为空。这会导致任何负面后果吗?【参考方案3】:
    转到项目文件夹 打开 .csproj 文件

    更换你的目标框架

    netcoreapp2.2netstandard2.0

看这张图更清楚

【讨论】:

【参考方案4】:

我在这个话题上的五分钱。我必须转换已经用 .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

【讨论】:

您是否有机会引用“.Net Standard 2.1 的 GUID 是 9A19103F-16F7-4668-BE54-9A1E7A4F7556”我在网上找到了相互矛盾的信息,但我找不到任何似乎是确定的。

以上是关于将 .NET Core 2.0 类库转换为 .NET Standard的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET Core 2.0 中将 DataTable 转换为 IEnumerable<T>

.Net Core 2.0 appsettings 与 .net 完整框架使用 ConfigurationManager

无法从完整的 .NET 项目项目引用 .NET Core 类库

将 asp.net core 2.0 url 重定向为小写

Handle Refresh Token Using ASP.NET Core 2.0 And JSON Web Token

NET Standard vs Net Core App:创建 .NET Core 项目时(使用控制台或类库)