.NET 4.5+項目遷移.NET Core的問題記錄
這幾天試着把目前的開發框架遷移到新的.net core平台,中間遇到的問題在這里簡單記錄一下。
遷移過程遇到的最大的問題IOC容器。我目前使用的IOC容器Castle Windsor還沒有.net core版本的實現,雖然core本身提供有注入功能,但我想在代碼上盡量保持與.NET Framework的兼容,最后還是選擇使用第三方容器Autofac,不過在容器上層做了隔離,也就是可以隨時替換掉IOC。
關於第三方容器接管.net core的注入實現,官方文檔有介紹,也可以參考autofac的實現
https://github.com/autofac/Autofac.Extensions.DependencyInjection
第二個問題是.net core沒有App Domain,不能像以前那樣方便的加載項目程序集,替換方法是手工掃描BIN目錄,再通過AssemblyLoadContext加載到內存。不過遇到一個問題是在加載入口項目DLL的時候,會提示無法加載,目前我是通過Assembly.GetEntryAssembly()后簡單粗暴的排除掉。哪位朋友知道有更好的方法,勞煩告知一下。
其他方式:
var assemblies = DependencyContext.Default.RuntimeLibraries;//需要引用程序集
...
第三個問題是很多Type的反射接口不存在了,可以通過Type.GetTypeInfo()獲取,不過要額外引用擴展庫。
第四個問題是在發布到服務器IIS之后,出現下面的異常:
HTTP Error 502.5 - Process Failure
Common causes of this issue:
The application process failed to start.
The application process started but then stopped.
The application process started but failed to listen on the configured port.
WINDOWS系統日志:
Failed to start process with commandline '"dotnet" .\Portal.dll', ErrorCode = '0x80070002'.
首先說一下,在部署IIS的時候,需要在windows server上安裝文件DotNetCore.1.0.1-WindowsHosting.exe,它會在IIS上添加一個aspnetcore module,托管net core的運行。新建站點后將應用程序池修改為無托管模式即可。就在這個地方我遇到上邊的錯誤,頁面一直提示502無法打開,端口和編譯平台都沒有問題。
網上找了很多方法試過后都沒有效果,最后感覺還是hosting的問題,而且我在安排hosting文件的時候的確報過一次錯,后來是用右鍵管理員運行安裝完成的,然后到iis模塊下果真沒有找到aspnetcore module。
卸載后重裝又出現了第一次的問題,安裝失敗。最后在stackoverflow上看到一句話
Make sure when you install the DotNetCore WindowsHosting you have access to the internet because the installer download the VS 2015 resist x64 as dependency.
VS 2015 resist x64 - http://download.microsoft.com/download/8/c/b/8cb4af84-165e-4b36-978d-e867e07fc707/vc_redist.x64.exe
果斷下載安裝后再運行WindowsHosting就沒再報錯了,這里還需要重啟一下服務器。
https://aka.ms/dotnetcore_windowshosting_1_1_0
手指在鍵盤上飛快的敲下那一串域名,點擊Enter,那一刻的感覺好極了@@
