今天是大年初二,都去走親戚了吧,享受一下這難得的能和親友相聚的時光。而我就不一樣了,今天一回到家就又開始瞎折騰了,哈哈哈。 問題背景 最近花了點時間用 ASP.NET Core 2 寫了個個人博客,中間出了好多問題,過程彎彎曲曲的,但好歹最後還是完成部署在阿裡雲上了。這幾天閑的沒事看 .NET Co ...
今天是大年初二,都去走親戚了吧,享受一下這難得的能和親友相聚的時光。而我就不一樣了,今天一回到家就又開始瞎折騰了,哈哈哈。
問題背景
最近花了點時間用 ASP.NET Core 2 寫了個個人博客,中間出了好多問題,過程彎彎曲曲的,但好歹最後還是完成部署在阿裡雲上了。這幾天閑的沒事看 .NET Core CLI,發現運行時標識符(Runtime IDentifier)居然有 win10-arm,這使我突然萌生了想把我的博客部署在 Raspberry Pi 上。(這就是純屬瞎折騰,部署在 Windows IoT 上確實沒用,反正玩都玩了,乾脆寫篇博客吧...)
發佈(Publish)應用
在將應用部署在 Windows IoT 上之前,首先是要以某種合適的方法將應用發佈到本機。(Windows 10 IoT 只包含運行時)
1. 更改項目輸出類型
打開項目“屬性”,將“應用程式”選項中的“輸出類型”,改為“控制台應用程式”。
或者你也可以直接編輯 .csproj 文件,將
2. 編輯 Program.cs
和在 Linux 上部署一樣, 在 BuildWebHost 裡加上這麼一句話 .UseUrls("http://*:5000")。* 作為主機名,5000 為監聽埠。
3. 在控制台發佈
在“工具”的“Nuget 包管理器”中,打開“程式包管理器控制台”。運行以下命令:
dotnet publish -c release -r win10-arm
因為是要部署在 Raspberry Pi 上, RID 用的 win10-arm。發佈的路徑是在 “你的項目\bin\Release\netcoreapp2.0\win10-arm\publish”。
部署應用
部署要遵頊以下步驟
1. 將發佈文件複製到 Raspberry Pi
怎麼去複製文件隨便,這裡我用的是 WinSCP ,因為我自己管理 Linux 的時候就用的這個,習慣了。但在複製之前,要先啟用 Windows IoT 的 FTP 管理。需要在 PowerShell 或者 Device Portal 運行命令:
start C:\Windows\System32\ftpd.exe
接下來就是運行你的 FTP 管理工具,新建一個文件夾,然後把文件複製進去即可。
2. 配置防火牆
使用 netsh 工具配置防火牆,運行命令:(一開始被這個問題困擾了半天,怎麼都訪問不到網站,做一個允悲的表情...)
netsh advfirewall firewall add rule name=”ASP.NET Core Web Server port” dir=in action=allow protocol=TCP localport=5000
3. 運行
切換到相應的目錄,運行 .exe 即可。
問題
嗯,我的博客沒有在 Raspberry Pi 上跑起來(但上面的東西都是對的),來看看異常 Unable to load DLL 'sni.dll'
這個問題通常引用一下 Nuget 包 System.Data.SqlClient 就好了,但在 Raspberry Pi 上沒好... 我開始了在 GitHub 上翻 issue 的旅程,揪心的事情還是發生了,人家壓根就沒支持 arm32 ... 也就是說,不算定製鏡像的話,只有 Raspberry Pi 是不支持的,Dragonboard 410c 是 arm64, MinnowBoard 是 x64 (允悲)... 讓我們期待 Raspberry Pi 4 吧!
我又新建了一個預設的項目,部署在了 Raspberry Pi 上,這下沒問題了...
但這一切並不能阻止我把博客部署在 Windows IoT 上,上虛擬機,終於成功了(攤手)...