.Net Core3 用Windows 桌面应用开发Asp.Net Core网站
前言
曾经在开发Asp.Net网站时就在想,为什么一定要把网站挂到IIS上?网站项目的Main函数哪儿去了?后来才知道这个Main函数在w3wp.exe里,这也是IIS的主进程。Asp.Net网站的命门被IIS捏着,我无力改变。有时需要临时搭建一个简单的Web服务器,去网上一通度娘,发现了MyWebServer、HFS(HTTPFileServer)等简单实用的Web服务器,而且它们还是桌面应用。我就在想,什么时候能用.Net来开发一个桌面Web服务器。直到.NetCore3.0诞生ㄟ(≧◇≦)ㄏ
Asp.NetCore网站本质上是一个控制台程序,使用Microsoft.NET.Sdk.WebSDK进行开发。Windows桌面应用是.NetCore3.0新增的开发方式,使用Microsoft.NET.Sdk.WindowsDesktopSDK开发。本来一个项目只能使用一个SDK,再加上这两种应用的特殊性,用Microsoft.NET.Sdk基础SDK(控制台应用的SDK)自行使用Nuget引入相关包来开发会导致各种问题。曾经试过网站应用,编译后会导致Razor引擎异常,无法正常渲染视图。但自从Asp.NetCore网站脱离IIS可以自寄宿运行,.NetCore支持Windows桌面应用开发,我就梦想能把Asp.NetCore应用托管到Windows桌面程序。C/C++曾经的天下,大.Net也想分杯羹。
经过一段时间的摸索,梦想终于实现了。在此记录随笔纪念,同时也分享给广大园友。
正文
废话不多说,先说明如何运行项目。首先下载项目源代码,注意是NetCore_3.0分支,地址:https://github.com/CoreDX9/IdentityServerDemo
确认VS201916.4.0以上版本,安装.NetCore3.1SDK。打开解决方案,卸载如图所示的项目,避免生成失败,都是些暂时没用的东西。
修改代码,具体如图所示:
还原解决方案的Nuget包,还原IdentityServer的npm包。在IdentityServer和IdentityServerGui上右键,选择发布,其中IdentityServer使用FolderProfileRelease配置进行发布。如果没有问题的话稍等片刻发布成功,到解决方案根目录找到.publish文件夹,进去把IdentityServerGui\release文件夹中的所有东西复制粘贴到IdentityServer\release文件夹中,途中如果存在重名文件,请忽略大小时间都相同的文件,其他文件尽量选最新或最大的,除非你清楚哪个是你要的。推荐在Win10下操作,或者用其他更智能的文件拷贝软件。
到此,所有准备工作已经完成,进去找到IdentityServerGui.exe双击运行即可。
效果预览
原理讲解
桌面程序是一个WPF程序,本来是想简单点用Winform来做的,结果Winform没有设计器(╯‵□′)╯︵┻━┻搞得我还现研究WPF怎么玩。关键在于,Asp.NetCore网站实际上就是一个标准的.Net程序集,可以当作类库来引用,这里搞清楚以后剩下的事就水到渠成了。在WPF项目的依赖项中添加引用Asp.NetCore网站项目,using命名空间,调用在Asp.NetCore项目中准备好的公共方法获取IHost接口对象,启动就行。要注意ContentRootPath对不对,不然css、js会404。
嗯,原理就是这么简单。。。来几张截图说明下关键部分吧o(*////▽////*)q
一些注意点:
1、在网站运行中关闭主窗口会最小化到系统托盘图标,双击图标恢复窗口。网站未运行时就是正常退出程序。
2、发布的网站实际上也可以单独运行,双击IdentityServer.exe就行。
3、关于Https配置,具体见下图。
4、关于网站日志信息,重定向输出流,具体看图。
5、WPF模型绑定需要实现的INotifyPropertyChanged接口代码由PropertyChanged.Fody在编译时注入。
6、注意跨线程调用UI控件的问题。
请同时克隆github项目https://github.com/CoreDX9/Harmonic/tree/dev,在IdentityServer项目的依赖项中将Harmonic(Harmonic.csproj)项目引用指向您下载的位置,否则会导致编译失败。
本文地址:https://www.cnblogs.com/coredx/p/12031514.html
完整源代码:Github
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。