转自:埃里克·周
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