前言
本文介紹在Winform桌面應用中,使用IISExpress做Host主機,啟動.Net平臺的Web專案。
瀏覽Web網頁使用CEF開源元件。
準備
首先建立Winform專案WinFormIISExpressHost。
然後把IISExpress資料夾放到專案的Bin\Debug下。
尋找IISExpress
尋找IISExpress很簡單,如果本機安裝了VS,那麼可以直接在C:\Program Files\IIS Express下找到。
當然,也可以上官網下載安裝,然後到安裝目錄找IISExpress,官方下載地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=34679
注意:IISExpress預設的資料夾名是【IIS Express】,這中間有個空格,我們需要去掉它,因為後面需要用命令列啟動IISExpress,空格會給我們帶來很多麻煩。
啟動IISExpress
IISExpress資料夾下有個iisexpress.exe檔案,我們只要啟動它IIS就會執行。
但IISExpress有個問題,它預設不讀取當前目錄的下配置檔案【AppServer\applicationhost.config】;所以我們在啟動IISExpress時,必須指定它的啟動檔案。
指定IISExpress的命令列如下,可以在CMD下執行。
start C:\Users\Administrator\Desktop\IISExpress\iisexpress /config:C:\Users\Administrator\Desktop\IISExpress\AppServer\applicationhost.config
現在我們把該命令列轉換成程式碼啟動,如下:
public string DirMain = Environment.CurrentDirectory + @"\"; private void Form1_Load(object sender, EventArgs e) { var plist = System.Diagnostics.Process.GetProcessesByName("iisexpress"); if (plist.Count() <= 0) { string para = $@"/config:{DirMain}IISExpress\AppServer\applicationhost.config"; Start($@"{DirMain}IISExpress\iisexpress", para); } } public static bool Start(string programPath, string para) { try { Process myProcess = new Process(); myProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; myProcess.StartInfo.UseShellExecute = false; myProcess.StartInfo.FileName = programPath; myProcess.StartInfo.CreateNoWindow = true; myProcess.StartInfo.Arguments = para; myProcess.EnableRaisingEvents = false; bool boo = myProcess.Start(); return boo; } catch (Exception ex) { return false; } }
修改IISExpress配置檔案
IISExpress的配置檔案是AppServer\applicationhost.config,現在我們修改它,讓IISExpress指定當前專案的路徑下的Bin\WebSite資料夾為網站應用的根目錄。
用記事本開啟applicationhost.config,然後找到sites(網站配置節點)。
修改網站資訊中的physicalPath(物理路徑)屬性的值。
ps:我們還可以修改網站執行埠,和在複製一個Site節點,增加另一個網站。
<sites> <site name="Development Web Site" id="1" serverAutoStart="true"> <application path="/"> <virtualDirectory path="/" physicalPath="D:\WinFormIISExpressHost\bin\Debug\WebSite" /> </application> <bindings> <binding protocol="http" bindingInformation=":5180:localhost" /> </bindings> </site> <siteDefaults> <!-- To enable logging, please change the below attribute "enabled" to "true" --> <logFile logFormat="W3C" directory="%AppData%\Microsoft\IISExpressLogs" enabled="false" /> <traceFailedRequestsLogging directory="%AppData%\Microsoft" enabled="false" maxLogFileSizeKB="1024" /> </siteDefaults> <applicationDefaults applicationPool="IISExpressAppPool" /> <virtualDirectoryDefaults allowSubDirConfig="true" /> </sites>
測試
現在我們新建一個WebTEST的MVC網站專案,然後將其釋出;將釋出的檔案放到剛剛的Winform專案的Bin/Website資料夾下(也可以直接釋出到該資料夾下)。
然後執行專案。
專案執行後,電腦右下角會出現IISExpress的圖示。
然後我們訪問http://localhost:5180/。訪問成功;如下圖:
CEF應用
IISExpress已經成功執行了,現在我們使用CEF來瀏覽網頁。(CEF是一個使用Chrome核心的Browser)
首先引用CEF(有時候引用了CEF後,專案會出現未重新整理的情況,關閉重啟即可在引用中看到引用的DLL了),如下圖:
引用了CEF後,我們會發現,專案編譯會報錯;這是因為CEF不支援AnyCPU,所以我們需要將平臺目標改成X64。(專案屬性和解決方案配置都要修改)
不過很多時候,我們的解決方案必須使用AnyCPU,那麼,我們就需要修改下工程檔案了。(專案屬性必須是X64)
用記事本開啟WinFormIISExpressHost.csproj;在第一個PropertyGroup下增加節點<CefSharpAnyCpuSupport>true</CefSharpAnyCpuSupport>;如下圖:
修改完工程檔案VS會提示重新載入專案;點選確定重新載入,然後專案已經可以編譯過去了。
現在我們將CEF應用到專案中,程式碼如下:
var chromeBrowser = new ChromiumWebBrowser("http://localhost:5180/"); panelParent.Controls.Add(chromeBrowser);
然後執行專案。如下圖,專案在Anycpu下執行成功。
----------------------------------------------------------------------------------------------------
程式碼已經傳到Github上了,歡迎大家下載。
Github地址:https://github.com/kiba518/WinFormIISExpressHost
----------------------------------------------------------------------------------------------------
注:此文章為原創,任何形式的轉載都請聯絡作者獲得授權並註明出處!
若您覺得這篇文章還不錯,請點選下方的【推薦】,非常感謝!
https://www.cnblogs.com/kiba/p/12719481.html