当前位置:首页 > 奇闻趣事

targetframework 一套代码同时支持.NET Framework和.NET Core

转自:埃里克·周

cnblogs.com/tianqing/p/11614303.html

在迁移的过程中。NET Core,我们迁移了原来的。. NET框架代码转换为。NET Core。

如果该行中只有一个小应用程序,则只有。NET Core需要在迁移升级后进行维护。

但是,如果是大型分布式应用程序,则有数百个服务器和数千个。NET应用程序进程。在这种情况下,在一定的时间内,我们需要维护两组代码,相同的产品。. NET框架和。NET Core。

特性需要分别在两套代码中实现,代码同步的工作量很大。因此,在这种情况下,有必要使用相同的代码来支持两者。. NET框架和。NET Core。

有了这个需求场景,我们推出了今天的。NET核心技术研究与分享。首先,总结总体思路:

1.在项目级别支持多个目标框架,并向不同的。NET目标框架

2.代码中使用的预处理指令支持两者。. NET框架和。网络核心

3.编译生成两个的dll。NET框架,并制作支持多个。NET目标框架

让我们看看第一步:

1.在项目级别支持多个目标框架,并为不同的框架添加不同的引用。NET目标框架

在这个示例代码中,我们使用。net标准2.0类库项目。目标框架支持这两者。. NET Framework 4.5.1和。网络标准2.0

双击项目进入XML文件编辑模式

& ltProjectSdk= "微软。. NET Sdk " >;

& ltPropertyGroup>。

& ltTargetFramework>。netstandard2.0 <。/TargetFramework>。

& lt/PropertyGroup>。

& lt/Project >

我们专注于编辑目标框架部分,并将其更改为目标框架,例如:

& ltPropertyGroup>。

& ltTargetFrameworks>。netstandard2.0net451 <。/TargetFrames & gt。

& lt/PropertyGroup>。

保存后,系统会提示您:

所有重新加载后,新项目的依赖关系如下:

这样,本项目支持多个。NET目标框架,我们可以给不同的。NET目标框架。当然,如果从属Nuget也支持相同的。NET目标框架,是最好的搭配:比如Newtonsoft。数据

添加Nuget引用后,项目中的引用不同。NET目标框架如下:

当然,我们可以向指定的。NET目标框架,例如:

& ltProjectSdk= "微软。. NET Sdk " >;

& ltPropertyGroup>。

& ltTargetFrameworks>。netstandard2.0net451& lt/TargetFrames & gt。

& lt/PropertyGroup>。

& ltItemGroup>。

& ltPackageReferenceInclude = " Newtonsoft。JSON " Version = " 12 . 0 . 2 "/& gt;

& lt/ItemGroup>。

& ltitemGroupCondition = ' $(TargetFrameWork)' = ' net 451 ' " & gt;

& ltProjectReferenceInclude= "..libnetframeworklibnetframework . cs proj "/& gt。

& lt/ItemGroup>。

& ltitemGroupCondition = ' $(TargetFrameWork)' = ' netstandard 2.0 ' " & gt;

& ltProjectReferenceInclude= "..libnetcorelibnetcore . cs proj "/& gt;

& lt/ItemGroup>。

& lt/Project >

参考链接:https://docs.microsoft.com/en-us/dotnet/standard/frameworks

第二,代码中使用的预处理指令支持这两者。. NET框架和。网络核心

如果相同的业务逻辑在。. NET框架和。NET Core,如果我们在同一个代码中,可以通过预处理指令来实现:

publicstringUserID

{

得到

{

#ifNET451

returnConvert。ToString(HttpContext。当前。会话[" UserID "]);

#elifNETSTANDARD2_0

returnhttpContext。会话。

#endif

}

privateset

{

#ifNET451

HttpContext。当前。会话[“用户标识”] =值;

#elifNETSTANDARD2_0

httpContext。Session.SetString( "UserID ",值);

#endif

}

}

参考链接是https://docs . Microsoft . com/en-us/dotnet/cs harp/language-reference/preprocessor-directions/preprocessor-if

这个地方有个对照表:

这样,在编写和编译代码后,您可以看到生成了两个文件夹:

1 >-所有再生开始:项目:LibNetCore,配置:调试任何CPU-

1 >c:程序file dotnetsdk 3 . 0 . 100-preview 3-010431 sdks微软。. net . sdktargessmicrosoft . net . runtimeidentifier reference . targets(151,5): messagenet SDK 1057:您正在使用的预览版本。NET Core。请检查https://aka.ms/dotnet-core-preview

1 >LibNetCore->;sourcereposLibNetCorebinDebugnetstandard2.0LibNetCore.dll

2 >-所有再生开始:项目:测试库,配置:调试任何CPU-

2 >c:程序file dotnetsdk 3 . 0 . 100-preview 3-010431 sdks微软。. net . sdktargessmicrosoft . net . runtimeidentifier reference . targets(151,5): messagenet SDK 1057:您正在使用的预览版本。NET Core。请检查https://aka.ms/dotnet-core-preview

2 >test library->;sourcereposTestLibrarybinDebugnetstandard2.0TestLibrary.dll

2 >test library->;sourcereposTestLibrarybinDebugnet451TestLibrary.dll

= = = = = = = = = =全部重建:2次成功,0次失败,0次跳过= = = = = = = = = = = =。

第三,编译生成两个的dll。NET框架,并制作支持多个。NET目标框架

两个。上一步生成的dll的. NET目标版本可以使Nuget包支持多个。NET目标框架。

您可以通过右键单击项目属性设置来设置Nuget打包

编译项目:已成功创建包“c:userszhougqsourcepstlibraryindextest library . 1 . 0 . 0 . nu pkg”。

使用包资源管理器编辑生成的Nuget包:

1.《targetframework 一套代码同时支持.NET Framework和.NET Core》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《targetframework 一套代码同时支持.NET Framework和.NET Core》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/guonei/1086680.html

上一篇

我和我的家乡电影在线观看完整版 高清无删减版资源下载

下一篇

马拉多纳昏迷去世仅隔720秒 究竟什么情况?具体事件详情是怎样的?

starnet 值得收藏!基于激光雷达数据的深度学习目标检测方法大合集(下)

  • starnet 值得收藏!基于激光雷达数据的深度学习目标检测方法大合集(下)
  • starnet 值得收藏!基于激光雷达数据的深度学习目标检测方法大合集(下)
  • starnet 值得收藏!基于激光雷达数据的深度学习目标检测方法大合集(下)

奉化网 奉化网红月饼店一天卖2万多个,深夜11点还有人排队

  • 奉化网 奉化网红月饼店一天卖2万多个,深夜11点还有人排队
  • 奉化网 奉化网红月饼店一天卖2万多个,深夜11点还有人排队
  • 奉化网 奉化网红月饼店一天卖2万多个,深夜11点还有人排队

imm32 基于二进制代码的代码混淆研究

见雪ID:三十二变 https://bbs.pediy.com/user-783210.htm *本文由观雪论坛32改为原文。请注明是雪景社区的 高级安全圈,我必须读的一本书 ﹀ ﹀ ﹀...

1067 每日一技 | 1067 Dynamo驱动结构框架需要注意的问题(文/腿腿教学网)

  • 1067 每日一技 | 1067 Dynamo驱动结构框架需要注意的问题(文/腿腿教学网)
  • 1067 每日一技 | 1067 Dynamo驱动结构框架需要注意的问题(文/腿腿教学网)
  • 1067 每日一技 | 1067 Dynamo驱动结构框架需要注意的问题(文/腿腿教学网)

天津发现古代墓葬近900处 年代涵盖了多个朝代

  • 天津发现古代墓葬近900处 年代涵盖了多个朝代
  • 天津发现古代墓葬近900处 年代涵盖了多个朝代
  • 天津发现古代墓葬近900处 年代涵盖了多个朝代

免费网页建站 不懂代码技术的小白们如何自己搭建网站?免费建站

  • 免费网页建站 不懂代码技术的小白们如何自己搭建网站?免费建站
  • 免费网页建站 不懂代码技术的小白们如何自己搭建网站?免费建站
  • 免费网页建站 不懂代码技术的小白们如何自己搭建网站?免费建站

中国国家代码 关于ISO3166《国家和所属地区名称代码》国际标准,这篇文章终于讲清楚了!

  • 中国国家代码 关于ISO3166《国家和所属地区名称代码》国际标准,这篇文章终于讲清楚了!
  • 中国国家代码 关于ISO3166《国家和所属地区名称代码》国际标准,这篇文章终于讲清楚了!
  • 中国国家代码 关于ISO3166《国家和所属地区名称代码》国际标准,这篇文章终于讲清楚了!

农民收入提前实现翻番目标 2019年突破1.6万元

  • 农民收入提前实现翻番目标 2019年突破1.6万元
  • 农民收入提前实现翻番目标 2019年突破1.6万元
  • 农民收入提前实现翻番目标 2019年突破1.6万元