迁移桌面程序到MS Store(5)——.NET Standard

  接下来的几篇,我想讨论下迁移桌面程序到MS Store,可以采用的比较常见、通用性比较强的实施步骤和分层架构。
  通常商业项目一般都是不断的迭代,不太可能突然停止更新现有的桌面版本,然后花很长时间从头来写UWP版本,所以我建议将迁移的过程分阶段,通过几个版本的迭代,慢慢地从传统桌面程序,转变成一个可以通过MS Store审核的APPX程序。至于之后要不要变成真·UWP可以视市场反馈决定。
  假设现有的桌面程序包含一个MainUI的WPF工程,多个.NET Framework 4.5的类库,以及一个C++编写的后台服务,以Windows Service的形式运行。之所以假设存在一个C++的Service,是考虑有些桌面程序要和硬件打交道,只有C语言版本的API。或者需要调用公司自己的通用类库,通常是C或C++写的跨平台版本。
  我推荐第一步,也是最简单的一步从.NET Framework类库着手改起。第一阶段的目标是将.NET Frramwork 4.5的类库,转换成.NET Standard 2.0版本的类库。

  

  这里要着重介绍一下.NET Standard。MSDN上对于.NET Standard的解释虽然每个字都认识,可把这些字连成句子,读起来就不太容易看懂。
  https://docs.microsoft.com/zh-cn/dotnet/standard/net-standard
  总而言之呢,就是一个Class Library(.NET Standard),它既可以被WPF工程引用,也可以被UWP工程引用,同时还可以被.NET Core的工程引用。
  在我们的例子中,因为我们的MainUI仍然是WPF的工程,所以不能直接将.NET Framework 4.5的Class Library转换成Universal Windows版本。同时我们又需要对未来可能存在的UWP版本提供支持,那么.NET Standard就是最佳的选择。
  在这种情况下,我们甚至可以在保留WPF的MainUI以支持Win 7(该死的老古董)的同时,新建一个UWP的UI工程来支持Win10。二者共用同一份的.NET Standard的Class Library。
  可能有些同学会问,同样一个C#的Class Library,为什么会有.NET Framework,Universal Windows,.NET Core和.NET Standard四种类型。下面我们来简单介绍以上几个概念,这些拗口的名称得感谢某软改名部八辈子祖宗,顺便问下还招人不?
  .NET Framework最为好懂,从2000年左右的.NET 1.0开始,现今已经发展到.NET 4.7.2。你说4.5以后怎么光升小版本号啊?啥时候出.NET 5啊?我说孩子你别傻了,.NET 5不就是.NET Core嘛?
  .NET Core,个人理解就是为了跨平台,重写的.NET Framework,也同样是为了跨平台,所以现阶段主打ASP.NET Core,而和Windows紧密结合的WPF,Winform,甚至UWP都是暂不支持的。毕竟在短时间内,重新写一份包含.NET 4.7.2所有功能的.NET Core不太现实。也没有迫切的需要。从GitHub的roadmap看,至少要到3.0版本才会支持UWP及桌面开发。
  https://blogs.msdn.microsoft.com/dotnet/2018/05/07/net-core-3-and-support-for-windows-desktop-applications

  

  Universal Windows class library就比较尴尬了,作为Win8那时候的Windows Runtime portable class library的Win10升级版。技术是好技术,可惜没赶上好时候。Win8和WP8的口碑不行,连累了Win10。简而言之就是给所有UWP程序用的class library。
  .NET Standard则是Universal Windows Class Library的跨平台再升级版。最终的大一统,今日的主角。

  

  上面这个表格看上去内容很多,实际我们仅仅需要看最后一列,使用最新的.NET Standard 2.0就可以了。抛去和我们迁移桌面程序关系不大的Mono,Xamarion和Unity,实际我们可以看到从.NET 4.6.1开始就已经支持.NET Standard 2.0了。从Windows 10版本来看的话,RS3的16299也已经是非常普及的版本了。
  升级到.NET Standard的好处非常明显,.NET Standard版本的类库可以在.NET Framework,UWP和.NET Core 之间共享,同时面向未来的升级做到无缝衔接。
  本着先易后难,循序渐进的原则,这一篇我们先讨论了什么是.NET Standard,以及升级的目的和意义。下一篇我们会介绍在升级.NET Framework到.NET Standard的过程中,可以使用的兼容性检测工具The .NET Portability Analyzer。顺便在展望一下.NET Core 3.0,一边写代码一边吹吹水,体验双倍的快乐!

原文地址:https://www.cnblogs.com/manupstairs/p/10236601.html

时间: 2024-10-12 23:40:58

迁移桌面程序到MS Store(5)——.NET Standard的相关文章

迁移桌面程序到MS Store(10)——在Windows S Mode运行

首先简单介绍Windows 10 S Mode,Windows在该模式下,只能跑MS Store里的软件,不能通过其他方式安装.好处是安全有保障,杜绝一切国产流氓软件.就像iOS一样,APP进商店都需审核,同时APP在沙盒环境下,以普通用户权限运行,不能偷偷摸摸地干坏事,抢占资源的情况也不会发生,自然体验流畅,系统性能提升.一切都是那么的美好,但Windows S Mode就是没有人用…… 这个悲剧真是不好说,也许是用户习惯,也许是违背人性,同时侵犯了厂商(要审核,要分成)和用户的利益(很多软件

在桌面程序上(Winform or others)和Metro/Modern 程序(Windows store app)的交互(相互打开,配置读取等)

这个标题真是取得我都觉得蛋疼..微软改名狂魔搞得我都不知道要叫哪个好.. 这边记录一下自己的桌面程序跟windows store app交互的过程. 由于某些原因,微软的商店应用的安全沙箱导致很多事情无法做到,因此额外做了一个.NET桌面引擎来辅助,那么现在就需要让这两个不同环境的程序进行交互. 第一步:在桌面应用引擎中,唤醒商店应用. 根据MSDN解释,这边最简单的办法是使用协议(URI protocol)来解决. 1:打开程序的Package.appxmanifest,在声明中添加协议 名称

桌面程序开发入门(WinForm with C#)

1.使用Visual Studio 2013创建新项目 2.创建一个主窗体和4个子窗体 3.创建一个数据库.一个表.一个存储过程 4.在配置文件里添加数据库连接字符串 5.真正的编码工作. 第一步:创建新项目,一张图片抵一万字!看图说话,呵呵.. 第二步:创建4个子窗体,名称分别是formCommandProc.cs.formDataAdapterProc.cs.formXMLCreate.cs.formXMLRead.cs. 三.创建一个数据库.一个表.一个存储过程.打开MS SQL Serv

关于xfce桌面程序启动失败

当双击桌面图标的时候,出现如下错误信息:Process org.xfce.FileManager exited with status 1 于是做出如下尝试: 1. ps aux | grep FileManager未找到 2. pacman -Qs FileManager未找到 3. pacman -Ql | grep FileManager找到一个相关的文件 /usr/share/dbus-1/services/org.xfce.FileManager.service根据路径名,猜测与dbu

让你的 Qt 桌面程序看上去更加 native(一共六篇)

<让你的 Qt 桌面程序看上去更加 native>是一个系列文章.在这个系列中,你将会了解到如何让你的 Qt 桌面应用程序看上去更加 native.这里,我假设你已经清楚如何使用 Qt 编写桌面应用程序,因为文章中大多都是所谓的“细节”,而有时候恰恰是这些“细节”决定着用户体验.同时,这里的程序都是指桌面程序,不包括各个嵌入式平台. 关于 Qt 的介绍这里就不再赘述.这里只说明一点,相比其他的 C++ UI库,Qt 的处理实际上更类似 Java 的 Swing.Qt 的大部分组件都是由自己的绘

突破短板,传统桌面程序 使用webapi 扩展迎合web和移动端融合的需求

传统桌面程序不能完全被web和移动端替代,但是需要改造.这里要说的是巧用webapi把以前用dll和com组件,ocx等方式做接口,做分布式开发的方式,改成restful 风格api的方式实现跨平台,多客户端(类型).并分享几则案例. 1.智能储物柜 项目背景:某智慧城市项目需要用到有智能锁的储物柜,用app扫码控制存取,并和智慧城市后台交互.智能锁系统是工业的塔式控制器,使用modbus ascii协议控制,端口使用串口.储物柜配备了工控电脑32寸竖屏,工控电脑控制塔式控制器(单片机),工控机

在.net桌面程序中自定义鼠标光标

有的时候,一个自定义的鼠标光标能给你的程序增色不少.本文这里介绍一下如何在.net桌面程序中自定义鼠标光标.由于.net的桌面程序分为WinForm和WPF两种,这里分别介绍一下. WinForm程序 对于WinForm程序,可以通过修改Control.Cursor属性来实现光标的修改,如果我们有光标文件的话,可以直接通过如下代码实现自定义光标: this.Cursor = new Cursor("myCursor.cur"); 但这种方式不是本文介绍的重点,本文主要介绍如何自己绘制光

windows之桌面程序引导功能

经常使用windows系统的同学可能都会遇到这样一种情况,刚按照完的应用程序,可能会在桌面产生一个提示信息,指示当前快捷方式可以使用了,并给出相应的文字说明,指示该快捷方式的功能.那么大家有没有考虑过这供功能是怎么实现的呢,使用一般的窗口spy工具应该都能抓取windows系统桌面使用的窗口类,我使用彗星小助手抓取了下,效果如图1所示.原来windows桌面窗口是一个listview,那么问题就变得简单了,我们只需要拿到窗口句柄,并向其发送消息LVM_GETITEMCOUNT消息,获取到窗口it

winfrom桌面程序调用python解释器

Winfrom桌面程序调用python解释器执行py脚本后台执行完成具体的功能,为什么要这样处理呢?因为我现在的大部分过项目都是后台的脚本处理,界面基本的输入完成之后,将参数按照规则传入到脚本的入口,根据参数的不同执行不同的脚本流程,如果要修改某一个处理过程或者添加新的模块,不需要修改前台的任何代码,只需要在脚本中修改就可以达到需求的效果,简单.方便,风险较小,影响可控等优点. 因此,我做了一个demo,仅供参考,不足之处,请赐教! 界面如图: Start_exe_py的执行代码如下: 1 pr