.Net Core3 用Windows 桌面應(yīng)用開(kāi)發(fā)Asp.Net Core網(wǎng)站
前言
曾經(jīng)在開(kāi)發(fā) Asp.Net 網(wǎng)站時(shí)就在想,為什么一定要把網(wǎng)站掛到 IIS 上?網(wǎng)站項(xiàng)目的 Main 函數(shù)哪兒去了?后來(lái)才知道這個(gè) Main 函數(shù)在 w3wp.exe 里,這也是 IIS 的主進(jìn)程。Asp.Net 網(wǎng)站的命門(mén)被 IIS 捏著,我無(wú)力改變。有時(shí)需要臨時(shí)搭建一個(gè)簡(jiǎn)單的 Web 服務(wù)器,去網(wǎng)上一通度娘,發(fā)現(xiàn)了MyWebServer、HFS (HTTP File Server) 等簡(jiǎn)單實(shí)用的 Web 服務(wù)器,而且它們還是桌面應(yīng)用。我就在想,什么時(shí)候能用 .Net 來(lái)開(kāi)發(fā)一個(gè)桌面 Web 服務(wù)器。直到 .Net Core 3.0 誕生 ㄟ(≧◇≦)ㄏ
Asp.Net Core 網(wǎng)站本質(zhì)上是一個(gè)控制臺(tái)程序,使用 Microsoft.NET.Sdk.Web SDK 進(jìn)行開(kāi)發(fā)。Windows桌面應(yīng)用是 .Net Core 3.0 新增的開(kāi)發(fā)方式,使用Microsoft.NET.Sdk.WindowsDesktop SDK 開(kāi)發(fā)。本來(lái)一個(gè)項(xiàng)目只能使用一個(gè)SDK,再加上這兩種應(yīng)用的特殊性,用 Microsoft.NET.Sdk 基礎(chǔ) SDK(控制臺(tái)應(yīng)用的SDK)自行使用 Nuget 引入相關(guān)包來(lái)開(kāi)發(fā)會(huì)導(dǎo)致各種問(wèn)題。曾經(jīng)試過(guò)網(wǎng)站應(yīng)用,編譯后會(huì)導(dǎo)致Razor引擎異常,無(wú)法正常渲染視圖。但自從 Asp.Net Core 網(wǎng)站脫離 IIS 可以自寄宿運(yùn)行,.Net Core 支持 Windows 桌面應(yīng)用開(kāi)發(fā),我就夢(mèng)想能把 Asp.Net Core 應(yīng)用托管到 Windows 桌面程序。C/C++ 曾經(jīng)的天下,大 .Net 也想分杯羹。
經(jīng)過(guò)一段時(shí)間的摸索,夢(mèng)想終于實(shí)現(xiàn)了。在此記錄隨筆紀(jì)念,同時(shí)也分享給廣大園友。
正文
廢話不多說(shuō),先說(shuō)明如何運(yùn)行項(xiàng)目。首先下載項(xiàng)目源代碼,注意是 NetCore_3.0 分支,地址:https://github.com/CoreDX9/IdentityServerDemo
確認(rèn)VS 2019 16.4.0 以上版本,安裝 .Net Core 3.1 SDK。打開(kāi)解決方案,卸載如圖所示的項(xiàng)目,避免生成失敗,都是些暫時(shí)沒(méi)用的東西。
修改代碼,具體如圖所示:
還原解決方案的 Nuget 包,還原 IdentityServer 的 npm 包。在 IdentityServer 和 IdentityServerGui 上右鍵,選擇發(fā)布, 其中 IdentityServer 使用FolderProfileRelease 配置進(jìn)行發(fā)布。如果沒(méi)有問(wèn)題的話稍等片刻發(fā)布成功,到解決方案根目錄找到.publish 文件夾,進(jìn)去把 IdentityServerGui\release 文件夾中的所有東西復(fù)制粘貼到IdentityServer\release 文件夾中,途中如果存在重名文件,請(qǐng)忽略大小時(shí)間都相同的文件,其他文件盡量選最新或最大的,除非你清楚哪個(gè)是你要的。推薦在 Win 10 下操作,或者用其他更智能的文件拷貝軟件。
到此,所有準(zhǔn)備工作已經(jīng)完成,進(jìn)去找到 IdentityServerGui.exe 雙擊運(yùn)行即可。
效果預(yù)覽
原理講解
桌面程序是一個(gè) WPF 程序,本來(lái)是想簡(jiǎn)單點(diǎn)用 Winform 來(lái)做的,結(jié)果 Winform 沒(méi)有設(shè)計(jì)器 (╯‵□′)╯︵┻━┻ 搞得我還現(xiàn)研究 WPF 怎么玩。關(guān)鍵在于, Asp.Net Core 網(wǎng)站實(shí)際上就是一個(gè)標(biāo)準(zhǔn)的 .Net 程序集,可以當(dāng)作類庫(kù)來(lái)引用,這里搞清楚以后剩下的事就水到渠成了。在 WPF 項(xiàng)目的依賴項(xiàng)中添加引用 Asp.Net Core 網(wǎng)站項(xiàng)目,using 命名空間,調(diào)用在 Asp.Net Core 項(xiàng)目中準(zhǔn)備好的公共方法獲取 IHost 接口對(duì)象,啟動(dòng)就行。要注意 ContentRootPath 對(duì)不對(duì),不然 css、js 會(huì)404。
嗯,原理就是這么簡(jiǎn)單。。。來(lái)幾張截圖說(shuō)明下關(guān)鍵部分吧 o(*////▽////*)q
一些注意點(diǎn):
1、在網(wǎng)站運(yùn)行中關(guān)閉主窗口會(huì)最小化到系統(tǒng)托盤(pán)圖標(biāo),雙擊圖標(biāo)恢復(fù)窗口。網(wǎng)站未運(yùn)行時(shí)就是正常退出程序。
2、發(fā)布的網(wǎng)站實(shí)際上也可以單獨(dú)運(yùn)行,雙擊 IdentityServer.exe 就行。
3、關(guān)于Https配置,具體見(jiàn)下圖。
4、關(guān)于網(wǎng)站日志信息,重定向輸出流,具體看圖。
5、WPF 模型綁定需要實(shí)現(xiàn)的 INotifyPropertyChanged 接口代碼由PropertyChanged.Fody 在編譯時(shí)注入。
6、注意跨線程調(diào)用UI控件的問(wèn)題。
更新(2020-1-10):
請(qǐng)同時(shí)克隆 github 項(xiàng)目https://github.com/CoreDX9/Harmonic/tree/dev,在 IdentityServer 項(xiàng)目的依賴項(xiàng)中將Harmonic(Harmonic.csproj )項(xiàng)目引用指向您下載的位置,否則會(huì)導(dǎo)致編譯失敗。
本文地址:https://www.cnblogs.com/coredx/p/12031514.html
完整源代碼:Github
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 如何利用IIS調(diào)試ASP.NET網(wǎng)站程序詳解
- 利用IIS調(diào)試ASP.NET網(wǎng)站程序的完整步驟
- asp.net core下給網(wǎng)站做安全設(shè)置的方法詳解
- IIS部署asp.net mvc網(wǎng)站的方法
- ASP.NET Core 2.0 使用支付寶PC網(wǎng)站支付實(shí)現(xiàn)代碼
- CodeFirst從零開(kāi)始搭建Asp.Net Core2.0網(wǎng)站
- 詳解ASP.NET Core 網(wǎng)站在Docker中運(yùn)行
- ASP.NET網(wǎng)站第一次訪問(wèn)慢的解決方法
- 如何使用ASP.NET創(chuàng)建網(wǎng)站并設(shè)計(jì)web頁(yè)面
相關(guān)文章
.Net項(xiàng)目中NLog的配置和使用實(shí)例詳解
這篇文章主要給大家介紹了關(guān)于.Net項(xiàng)目中NLog的配置和使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用.Net具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07asp.net GridView中使用RadioButton單選按鈕的方法
這篇文章主要介紹了asp.net GridView中使用RadioButton單選按鈕的方法,結(jié)合實(shí)例形式總結(jié)分析了三種GridView中使用RadioButton單選按鈕的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07獲取根目錄的URL例如http://localhost:51898
這篇文章主要介紹了獲取根目錄的URL的方法,需要的朋友可以參考下2014-02-02asp.net程序編譯調(diào)試時(shí)偶爾出現(xiàn)訪問(wèn)被拒絕的錯(cuò)誤的解決方法
asp.net程序編譯調(diào)試時(shí)偶爾出現(xiàn)訪問(wèn)被拒絕的錯(cuò)誤的解決方法...2007-04-04ASP.NET中XML轉(zhuǎn)JSON的方法實(shí)例
這篇文章主要介紹了ASP.NET中XML轉(zhuǎn)JSON的方法,實(shí)例講述了XML轉(zhuǎn)json的原理與實(shí)現(xiàn)過(guò)程,具有一定的實(shí)用價(jià)值,需要的朋友可以參考下2014-10-10asp.net 取消緩存相關(guān)問(wèn)題說(shuō)明
asp.net 取消緩存相關(guān)問(wèn)題說(shuō)明,需要的朋友可以參考下。2009-11-11asp.net core3.1 引用的元包dll版本兼容性問(wèn)題解決方案
這篇文章主要介紹了asp.net core 3.1 引用的元包dll版本兼容性問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03