将 .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.Array
、String
、List
等等。目前有different implementations:.NET Framework、.NET Core、Mono、Xamarin、Windows Phone。这意味着不同的实现可以重新编译和重用你的库以netstandard
为目标。对于 NuGet 包来说,这是一个非常好的选择。
您可以使用这些版本并找到您的库所需的最小功能集。每个 Dotnet 标准都扩展了先前版本的功能。因此,选择的目标版本越少,您的库支持的平台就越多。
【讨论】:
虽然 .Net Standard 不是框架,但您仍然在 project.csproj 文件的您可以编辑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,即“-
转到项目文件夹
打开 .csproj 文件
更换你的目标框架
netcoreapp2.2 到 netstandard2.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 类库
Handle Refresh Token Using ASP.NET Core 2.0 And JSON Web Token