将 .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.Array
、String
、List
,等等。目前,有 different implementations:.NET Framework、.NET Core、Mono、Xamarin、WindowsPhone。这意味着不同的实现可以重新编译和重用您的库目标 netstandard
。这是一个非常好的 NuGet 包选择。
您可以尝试这些版本并找到您的库所需的最小功能集。每个 Dotnet 标准都扩展了以前版本的功能。因此,选择的目标版本越少,您的库支持的平台就越多。
- 转到项目文件夹
- 打开 .csproj 文件
替换你的目标框架
netcoreapp2.2 至 netstandard2.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
有没有办法轻松地将面向 .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.Array
、String
、List
,等等。目前,有 different implementations:.NET Framework、.NET Core、Mono、Xamarin、WindowsPhone。这意味着不同的实现可以重新编译和重用您的库目标 netstandard
。这是一个非常好的 NuGet 包选择。
您可以尝试这些版本并找到您的库所需的最小功能集。每个 Dotnet 标准都扩展了以前版本的功能。因此,选择的目标版本越少,您的库支持的平台就越多。
- 转到项目文件夹
- 打开 .csproj 文件
替换你的目标框架
netcoreapp2.2 至 netstandard2.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