.NET Standard SDK 样式项目中的目标框架
以应用或库中的框架为目标时,需要指定想要向应用或库提供的 API 集。 使用目标框架名字对象 (TFM) 在项目文件中指定目标框架。
应用或库可以使用 .NET Standard 版本作为目标。 .NET Standard 版本表示所有 .NET 实现中的标准化 API 集。 例如,库可以使用 .NET Standard 1.6 作为目标,并获得对可使用相同基本代码跨 .NET Core 和 .NET Framework 工作的 API 的访问权限。
应用或库还能以一个特定 .NET 实现为目标,获得特定于实现的 API 的访问权限。 例如,面向 Xamarin.iOS 的应用(如 Xamarin.iOS10)有权访问 Xamarin 提供的适用于 iOS 10 的 iOS API 包装器;面向通用 Windows 平台 (UWP) 的应用(如 uap10.0)有权访问为运行 Windows 10 的设备编译的 API。
对于某些目标框架(例如 .NET Framework),API 由框架在系统上安装的程序集定义,并且可能包括应用程序框架 API(例如 ASP.NET)。
对于基于包的目标框架(例如 .NET Standard 和 .NET Core),API 由包含在应用或库中的包定义。 元包 是一个 NuGet 包,NuGet 包本身不包含任何内容,只是一个依赖项列表(其他包)。 基于 NuGet 包的目标框架隐式指定一个元包,该元包引用一起构成框架的所有包。
最新版本
下表定义了最常见的目标框架、如何引用这些框架,以及它们实现的 .NET Standard 版本。 这些目标框架版本是最新的稳定版本。 预览版不会显示。 目标框架名字对象 (TFM) 是一个标准化令牌格式,用于指定 .NET 应用或库的目标框架。
支持的目标框架
目标框架通常由 TFM 引用。 下表显示 .NET SDK 和 NuGet 客户端支持的目标框架。 等效项显示在括号内。 例如,win81
对于 netcore451
来说等效于 TFM。
.NET 5 特定于 OS 的 TFM
对于每个 .NET 5.0 及更高版本的 TFM(例如 net5.0
),都存在包含特定于 OS 的绑定的 TFM 变体。 下表中显示了这些变体。
还可以指定可选的 OS 版本,例如 net5.0-ios12.0
。有关 .NET 5 TFM 的详细信息,请参阅 .NET 5 中的目标框架名称。
如何指定目标框架
在项目文件中指定目标框架。 指定单个目标框架时,使用 TargetFramework 元素。 以下控制台应用项目文件演示了如何面向 .NET 5.0:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> </PropertyGroup> </Project>
指定多个目标框架时,可有条件地为每个目标框架引用程序集。 在代码中,可使用具有 -if-then-else 逻辑的预处理器符号,有条件地针对这些程序集进行编译。
以下库项目面向 .NET Standard (netstandard1.4
) 和 .NET Framework(net40
和 net45
)的 API。 将复数形式的 TargetFrameworks 元素与多个目标框架一起使用。 为两个 .NET Framework TFM 编译库时,Condition
属性包括特定于实现的包:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFrameworks>netstandard1.4;net40;net45</TargetFrameworks> </PropertyGroup> <!-- 有条件地获取.NET Framework 4.0 目标的引用 --> <ItemGroup Condition=" '$(TargetFramework)' == 'net40' "> <Reference Include="System.Net" /> </ItemGroup> <!-- 有条件地获取.NET Framework 4.5 目标引用 --> <ItemGroup Condition=" '$(TargetFramework)' == 'net45' "> <Reference Include="System.Net.Http" /> <Reference Include="System.Threading.Tasks" /> </ItemGroup> </Project>
在库或应用中,使用预处理器指令编写条件代码,针对每个目标框架进行编译:
public class MyClass { static void Main() { #if NET40 Console.WriteLine("Target framework: .NET Framework 4.0"); #elif NET45 Console.WriteLine("Target framework: .NET Framework 4.5"); #else Console.WriteLine("Target framework: .NET Standard 1.4"); #endif } }
使用 SDK 样式项目时,生成系统可识别预处理器符号,这些符号表示支持的目标框架版本表中所示的目标框架。 使用表示 .NET Standard、.NET Core 或 .NET 5 TFM 的符号时,请用下划线替换点和连字符,并将小写字母更改为大写字母(例如,netstandard1.4
的符号为 NETSTANDARD1_4
)。
.NET 目标框架的预处理器符号的完整列表如下:
参考微软官方文档: https://docs.microsoft.com/zh-cn/dotnet/standard/frameworks
成在管理,败在经验;嬴在选择,输在不学! 贵在坚持!
个人作品
BIMFace.SDK.NET
开源地址:https://gitee.com/NAlps/BIMFace.SDK
系列博客:https://www.cnblogs.com/SavionZhang/p/11424431.html
系列视频:https://www.cnblogs.com/SavionZhang/p/14258393.html
技术栈
1、Visual Studio、.NET Core/.NET、MVC、Web API、RESTful API、gRPC、SignalR、Java、Python
2、jQuery、Vue.js、Bootstrap、ElementUI
3、数据库:分库分表、读写分离、SQLServer、MySQL、PostgreSQL、Redis、MongoDB、ElasticSearch、达梦DM
4、架构:DDD、ABP、SpringBoot、jFinal
5、环境:跨平台、Windows、Linux、Nginx
6、移动App:Android、IOS、HarmonyOS、微信小程序、钉钉、uni-app、MAUI
分布式、高并发、云原生、微服务、Docker、CI/CD、DevOps、K8S;Dapr、RabbitMQ、Kafka、RPC、Elasticsearch。
欢迎关注作者头条号 张传宁IT讲堂,获取更多IT文章、视频等优质内容。
出处:www.cnblogs.com/SavionZhang
作者:张传宁 技术顾问、培训讲师、微软MCP、系统架构设计师、系统集成项目管理工程师、科技部创新工程师。
专注于企业级通用开发平台、工作流引擎、自动化项目(代码)生成器、SOA 、DDD、 云原生(Docker、微服务、DevOps、CI/CD);PDF、CAD、BIM 审图等研究与应用。
多次参与电子政务、图书教育、生产制造等企业级大型项目研发与管理工作。
熟悉中小企业软件开发过程:可行调研、需求分析、架构设计、编码测试、实施部署、项目管理。通过技术与管理帮助中小企业实现互联网转型升级全流程解决方案。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如有问题,可以通过邮件905442693@qq.com联系。共同交流、互相学习。
如果您觉得文章对您有帮助,请点击文章右下角【推荐】。您的鼓励是作者持续创作的最大动力!