在離線環境中發布.NET Core至Windows Server 2008
0x00 寫在開始
之前一篇博客中寫了在離線環境中使用.NET Core,之后一邊學習一邊寫了一些頁面作為測試,現在打算發布一下試試。看了下官方給出的發布教程感覺挺詳細的了(https://docs.asp.net/en/latest/publishing/iis.html),不過畢竟離線環境還是挺麻煩的,直覺告訴我發布過程中會遇到幺蛾子。果然就遇到問題了,不過解決起來都很簡單。這里做個記錄順便分享下,希望對有類似需求的同學有所幫助。
0x01 遇到的問題和解決方法
看了官方發布教程,首先去https://www.microsoft.com/net/download下載服務端安裝包,下載后復制到離線網絡服務器上安裝。結果遇到了問題1:
問題1:安裝程序可以打開,但安裝過程中提示未知錯誤,安裝失敗。(可惜離線網絡也沒法截圖)
解決過程:看了下日志應該是安裝某個組件過程中返回了錯誤而失敗。我之前曾經過單獨安裝.NET Core SDK,也是失敗,查看日志是缺少Microsoft Visual C++ 2015 Redistributable,裝上就可以了。服務程序安裝包也會安裝.NET Core SDK,應該也是需要Microsoft Visual C++ 2015 Redistributable,於是從VS2015安裝鏡像里找出了64位安裝包(下載地址:https://www.microsoft.com/en-us/download/details.aspx?id=48145),結果安裝時又遇到了問題2:
問題2:安裝Microsoft Visual C++ 2015 Redistributable時提示安裝包無法驗證。
解決過程:這個問題在之前離線安裝VS2015時就遇到過了,解決起來輕車熟路,把缺少的兩個證書導入就OK了。詳細可以看在離線環境中使用.NET Core。
導入證書后順利解決了問題2,安裝好Microsoft Visual C++ 2015 Redistributable后問題1也解決了,服務程序安裝成功。一邊感嘆自己的聰明一邊打開命令行測試了下dotnet,結果出現了問題3:
問題3:命令行執行dotnet命令后提示:
Failed to load the dll from [C:\Program Files\dotnet\host\fxr\1.0.1\hostfxr.dll], HRESULT: 0x80070057
解決過程:這時候只要一邊心中默念遇到問題的肯定不會只有我自己,一邊打開搜索引擎就可以了。順便安利一下bing,特別是切換到英文bing,搜問題還是很好的。果然發現之前已經有人在github上提過這個issue了(https://github.com/dotnet/cli/issues/3907)。解決方式就是安裝補丁KB2533623(下載地址:https://support.microsoft.com/en-us/kb/2533623)。關於系統依賴更詳細的說明可以參照這篇文章:https://github.com/dotnet/core/blob/master/Documentation/prereqs.md。安裝補丁重啟后dotnet命令就正常了。
最后就是記得要運行iisreset,一定要記得(因為我忘了,折騰了半天才想起來)。
0x02 正確的順序
以下順序只在Windows Server 2008 R2 64上實際測試過:
1、導入證書。
2、安裝Microsoft Visual C++ 2015 Redistributable。
3、安裝KB2533623補丁。
4、安裝DotNetCore.1.0.0-WindowsHosting.exe。
5、命令行運行iisreset重啟IIS。
關於如何配置IIS和部署應用,官方教程說的都很詳細了。值得一提的是等問題解決了后才發現官方教程最后居然有專門的Common errors:https://docs.asp.net/en/latest/publishing/iis.html#common-errors。看一下也挺有收獲的。
0x03 寫在最后
目前我們主要用.NET Core做一些測試,同時邊測試邊學習,提前踩坑,用到的時候能快速上手。並沒有用來做新功能或試圖代替原有功能。不過就目前來看效果還是不錯的,開發過程體驗也很好,真心看好.NET Core。