ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Net Core 3 用 Windows 桌面应用开发 Asp.Net Core 网站

2022-07-14 13:32:13  阅读:721  来源: 互联网

标签:Core Asp 桌面 网站 IdentityServer Net


前言

曾经在开发 Asp.Net 网站时就在想,为什么一定要把网站挂到 IIS 上?网站项目的 Main 函数哪儿去了?后来才知道这个 Main 函数在 w3wp.exe 里,这也是 IIS 的主进程。Asp.Net 网站的命门被 IIS 捏着,我无力改变。有时需要临时搭建一个简单的 Web 服务器,去网上一通度娘,发现了 MyWebServer、HFS (HTTP File Server) 等简单实用的 Web 服务器,而且它们还是桌面应用。我就在想,什么时候能用 .Net 来开发一个桌面 Web 服务器。直到 .Net Core 3.0 诞生 ㄟ(≧◇≦)ㄏ

Asp.Net Core 网站本质上是一个控制台程序,使用 Microsoft.NET.Sdk.Web SDK 进行开发。Windows桌面应用是 .Net Core 3.0 新增的开发方式,使用Microsoft.NET.Sdk.WindowsDesktopSDK开发。本来一个项目只能使用一个SDK,再加上这两种应用的特殊性,用Microsoft.NET.Sdk基础 SDK(控制台应用的SDK)自行使用 Nuget 引入相关包来开发会导致各种问题。曾经试过网站应用,编译后会导致Razor引擎异常,无法正常渲染视图。但自从 Asp.Net Core 网站脱离 IIS 可以自寄宿运行,.Net Core 支持 Windows 桌面应用开发,我就梦想能把 Asp.Net Core 应用托管到 Windows 桌面程序。C/C++ 曾经的天下,大 .Net 也想分杯羹。

经过一段时间的摸索,梦想终于实现了。在此记录随笔纪念,同时也分享给广大园友。

正文

废话不多说,先说明如何运行项目。首先下载项目源代码,注意是 NetCore_3.0 分支,地址:https://github.com/CoreDX9/IdentityServerDemo

确认VS 2019 16.4.0 以上版本,安装 .Net Core 3.1 SDK。打开解决方案,卸载如图所示的项目,避免生成失败,都是些暂时没用的东西。
https://www.icode9.com/i/l/?n=18&i=common/1512608/201912/1512608-20191212213159996-1572808341.jpg

修改代码,具体如图所示:
https://www.icode9.com/i/l/?n=18&i=common/1512608/201912/1512608-20191213211701735-1205578587.jpg

还原解决方案的 Nuget 包,还原 IdentityServer 的 npm 包。在 IdentityServer 和 IdentityServerGui 上右键,选择发布, 其中 IdentityServer 使用 FolderProfileRelease 配置进行发布。如果没有问题的话稍等片刻发布成功,到解决方案根目录找到 .publish 文件夹,进去把 IdentityServerGui\release 文件夹中的所有东西复制粘贴到 IdentityServer\release 文件夹中,途中如果存在重名文件,请忽略大小时间都相同的文件,其他文件尽量选最新或最大的,除非你清楚哪个是你要的。推荐在 Win 10 下操作,或者用其他更智能的文件拷贝软件。
https://www.icode9.com/i/l/?n=18&i=common/1512608/201912/1512608-20191212214215480-452498219.jpg

到此,所有准备工作已经完成,进去找到 IdentityServerGui.exe 双击运行即可。

效果预览

效果预览
效果预览

原理讲解

桌面程序是一个 WPF 程序,本来是想简单点用 Winform 来做的,结果 Winform 没有设计器 (╯‵□′)╯︵┻━┻ 搞得我还现研究 WPF 怎么玩。关键在于, Asp.Net Core 网站实际上就是一个标准的 .Net 程序集,可以当作类库来引用,这里搞清楚以后剩下的事就水到渠成了。在 WPF 项目的依赖项中添加引用 Asp.Net Core 网站项目,using 命名空间,调用在 Asp.Net Core 项目中准备好的公共方法获取 IHost 接口对象,启动就行。要注意 ContentRootPath 对不对,不然 css、js 会404。

嗯,原理就是这么简单。。。来几张截图说明下关键部分吧 o(////▽////)q
效果预览
效果预览
效果预览

一些注意点

  1. 在网站运行中关闭主窗口会最小化到系统托盘图标,双击图标恢复窗口。网站未运行时就是正常退出程序。
  2. 发布的网站实际上也可以单独运行,双击 IdentityServer.exe 就行。
  3. 关于Https配置,具体见下图。
  4. 关于网站日志信息,重定向输出流,具体看图。
  5. WPF 模型绑定需要实现的INotifyPropertyChanged接口代码由PropertyChanged.Fody在编译时注入。
  6. 注意跨线程调用UI控件的问题。
    效果预览
    效果预览
    效果预览
    效果预览

更新

2020-1-10

请同时克隆 github 项目https://github.com/CoreDX9/Harmonic/tree/dev,在IdentityServer项目的依赖项中将Harmonic(Harmonic.csproj)项目引用指向您下载的位置,否则会导致编译失败。

2020-2-6

项目简介和运行方法已经写入 GitHub 的 README.md 中,将来如有更新会直接更新到 GitHub 的说明文档,此处不再更新。

转载请完整保留以下内容,未经授权删除以下内容进行转载盗用的,保留追究法律责任的权利!

本文地址:https://www.cnblogs.com/coredx/p/12031514.html

完整源代码:Github

里面有各种小东西,这只是其中之一,不嫌弃的话可以Star一下。

 

本文作者:coredx

本文链接:https://www.cnblogs.com/coredx/p/12031514.html

版权声明:本作品采用署名-非商业性使用-禁止演绎 4.0 国际版 (CC BY-NC-ND 4.0)许可协议进行许可。

文章中如有许可声明,以文章中的声明为准。

标签:Core,Asp,桌面,网站,IdentityServer,Net
来源: https://www.cnblogs.com/guangzhiruijie/p/16477361.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有