当前位置: 首页 > news >正文

.Net 知识杂记

记录平日中琐碎的.net 知识点。不定期更新

目标框架名称(TFM)

我们创建C#应用程序时,在项目的工程文件(*.csproj)中都有targetFramework标签,以表示项目使用的目标框架

各种版本的TFM

.NET Framework

.NET Standard

.NET5 及更高版本

UMP等

参考文档:针对 NuGet 的目标框架参考 | Microsoft Learn

如何创建多TFM的项目

首次创建项目时,建议创建 .NET Standard 类库,因为它提供了与最广泛使用项目的兼容性。 使用 .NET Standard 可以默认向 .NET 库添加跨平台支持。 但是,在某些情况下,可能还需要包含针对特定框架的代码。 本文介绍如何针对SDK样式的项目执行该操作。

对于 SDK 样式的项目,可以在项目文件中配置对多个目标框架(TFM)的支持,然后使用dotnet pack 或 msbuild /t:pack 创建包。

 请注意:.NET 和 .NET Standard 目标是为 .NET 库添加跨平台支持的最佳方式。

  • .NET Standard是一套 .NET API 规范,在所有 .NET 实现中推出。 以 .NET Standard 为目标可以生成受限于使用给定版本的 .NET Standard 中的 API 的库,这意味着实现该版本的 .NET Standard 的所有平台都可以使用它。
  • .NET 6-8 是 .NET 的实现。 每个版本是具有一组统一功能和 API 的单一产品,可用于 Windows 桌面应用和跨平台控制台应用、云服务和网站。
步骤
  1. 在 Visual Studio 中或使用 dotnet new classlib 创建新的 .NET Standard 类库。

    建议创建 .NET Standard 类库以获得最佳兼容性。

  2. 编辑 .csproj 文件以支持目标框架。 例如,更改

    <TargetFramework>netstandard2.0</TargetFramework>

    更改为:

    <TargetFrameworks>netstandard2.0;net45</TargetFrameworks>

    确保将 XML 元素从单数更改为复数(将“s”添加到开始和结束标记)。

  3. 如果你有任何仅在一个 TFM 中工作的代码,则可以使用 #if NET45 或 #if NETSTANDARD2_0 分隔与 TFM 相关的代码。 (有关详细信息,请参阅如何设定多目标。)例如,可以使用以下代码

public string Platform {get {
#if NET45return ".NET Framework"
#elif NETSTANDARD2_0return ".NET Standard"
#else
#error This code block does not match csproj TargetFrameworks list
#endif}
}

参考文章:项目文件中 NuGet 包的多目标 | Microsoft Learn

NuGet packages.config 文件参考 | Microsoft Learn

相关文章:

  • Flutter 使用 AndroidStudio 给(Android 安卓)进行签名方法
  • 【2024系统架构设计】案例分析- 4 嵌入式
  • 《HelloGitHub》第 96 期
  • docker centos7离线安装ElasticSearch单机版
  • FastAPI+React全栈开发08 安装MongoDB
  • 【C++的奇迹之旅】C++关键字命名空间使用的三种方式C++输入输出命名空间std的使用惯例
  • Discourse 用户可以自己修改用户名吗
  • 后端常问面经之Java基础
  • 【unity】如何汉化unity Hub
  • 【React】React表单组件
  • Android裁剪图片为波浪形或者曲线形的ImageView
  • C++就业方向
  • Vue——案例01(查询用户)
  • c语言中动态内存管理
  • go中函数与方法的区别与go中关于面向对象理解
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • CentOS 7 修改主机名
  • CSS 提示工具(Tooltip)
  • css布局,左右固定中间自适应实现
  • download使用浅析
  • Javascript弹出层-初探
  • JDK9: 集成 Jshell 和 Maven 项目.
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Just for fun——迅速写完快速排序
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 百度小程序遇到的问题
  • 创建一种深思熟虑的文化
  • ------- 计算机网络基础
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 浏览器缓存机制分析
  • 批量截取pdf文件
  • 七牛云假注销小指南
  • 如何选择开源的机器学习框架?
  • 在weex里面使用chart图表
  • 自定义函数
  • scrapy中间件源码分析及常用中间件大全
  • $$$$GB2312-80区位编码表$$$$
  • ${factoryList }后面有空格不影响
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (3)选择元素——(17)练习(Exercises)
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (转) ns2/nam与nam实现相关的文件
  • (转)Mysql的优化设置
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET 解决重复提交问题
  • .NET中winform传递参数至Url并获得返回值或文件
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • @RequestBody的使用
  • [ C++ ] STL---string类的使用指南
  • [120_移动开发Android]008_android开发之Pull操作xml文件