Core 2.0 的dll實時更新、https、依賴包變更問題及解決

来源:http://www.cnblogs.com/kvspas/archive/2017/08/16/7086396.html
-Advertisement-
Play Games

今天所有開發環境已經遷移到mac OS下的Visual Studio Code + 命令行編譯發佈,而運行伺服器是CentOS7,和windows沒什麼關聯了。 只要你Relese編譯併在本地有一個與伺服器相同的運行環境中運行成功了,遷移到真實伺服器不會有什麼難度。 下麵是遷移到 2.0 版本之後遇 ...


 

今天所有開發環境已經遷移到mac OS下的Visual Studio Code + 命令行編譯發佈,而運行伺服器是CentOS7,和windows沒什麼關聯了。 只要你Relese編譯併在本地有一個與伺服器相同的運行環境中運行成功了,遷移到真實伺服器不會有什麼難度。

 

下麵是遷移到 2.0 版本之後遇到的3個問題及解決辦法

 

 1:有時候dll不會實時更新(不是每次都會遇到,並且這事情僅發生在Centos上)有時候你需要把與dll相關的所有邊緣文件一同傳上去(例如配套的xxx.config.json、xxx.runtime.json),它才會真正在重啟應用程式後立即更新(註意這裡是重啟應用程式),否則重啟程式無效,這個情況一旦出現,哪怕是重啟系統後(註意這裡是重啟系統),它依然載入過去的老dll,過幾個小時後再次手動重啟系統才會載入最新dll。

雖然道理上是說不通的,但這是我真實遇到的事例,原因嘛,不知道,也沒空折騰,這類機制可以從側面得到證明: 你正常運行著服務的時候,可以去運行目錄裡面更新、甚至刪除dll,如果不重啟,正在運行的程式不會受到影響,說明linux版本的載入機制不同於mac和windows,它可能是把現有dll全都複製到某個地方後,並且要同時比較配套json文件的時間戮和內容後才會運行。

別的linux會不會也這樣,不清楚。

 

 

2:https配置不同以往

Kestrel已經演化成獨立完整的伺服器,應對真實請求沒什麼問題了, 但是1.1及以下版本載入https的方法已經不適用,需要改為如下的辦法:

            var WebServer = new WebHostBuilder()
            
            .UseKestrel(options => options.Listen(IPAddress.Any, servicePort, listenOptions =>
            {
                listenOptions.UseHttps(new X509Certificate2("你的.pfx", "pfx文件的密碼"));
                options.Limits.MaxConcurrentConnections = 100;
                options.Limits.MaxConcurrentUpgradedConnections = 100;
                options.Limits.MaxRequestBodySize = 10 * 1024;
            }))
            .UseContentRoot(AppContext.BaseDirectory)
            .UseStartup<Startup>()
            .Build();

            WebServer.Run();

 

相信很多人通過LetsEncript來獲取https,原始得到的密鑰不是pfx格式,隨便找個線上轉換就可以了。

 

3, 依賴包變更

我沒有用過 preview 3, 而是從preview2遷移到正式版2.0的, 可能你會和我一樣遷移後遇到載入View的時候,出現“Cannot find compilation library location for package 'Microsoft.Win32.Registry” , 晃眼一看這包的命名,嚇死人,實際它和win32沒什麼必然關聯。解決辦法:

在csproj中添加:

<MvcRazorExcludeRefAssembliesFromPublish>false</MvcRazorExcludeRefAssembliesFromPublish>

以及:

   <PackageReference Include="Microsoft.Win32.Registry" Version="4.4.0" />

確保編譯發佈後你的運行目錄下存在refs文件夾,裡面都是System.xxxx、Microsoft.xxx 這些基本dll,就行了。

這僅是其中一例,我在Google搜索這個問題的時候,還發現別人遇到了類似的其它包Cannot find,道理都一樣。

 

下麵是尚未解決的,等待各位探討

 

1,目前我是把項目編譯為全平臺通用的dll,mac編譯出來的dll放到centos運行(放到windows也行),實際依賴包保存在系統安裝的CLR中。另有一種辦法是編譯過程中指定runtime,針對centos編譯,得到完全二進位、綠色安全部署的完整運行包(容量會很大),可以扔到生產環境中直接就運行了,這種情況我只在1.0 beta的時候在windows上成功編譯出來,現在mac沒法編譯, 命令行假死20分鐘沒反應。

 

2,想嘗試Visual Studio for Mac,但是搞不定Release發佈,GUI中沒法配置,設置為Release後,晃眼換個視窗再回去又變回Debug(我明白windows visual studio中統一在解決方案中配置的道理,沒用),手動修改csproj的相關配置為Release也沒用,就放棄了(當然這是我個人能力不行,相信別人是可以的)。

 

3, 我之所以選擇CentOS 7 是因為它有一個Minimal版本,記憶體等資源要求較低,並不是因為它是Redhat的雙胞胎,如果哪位同好發現還有更好性價比的Linux,還望推薦一份,先行謝過。

 

4,core雖然正式跨平臺了,但是微軟還有另一件核武器吧: .net native 還有沒有下文? 自從看到僅支持 windows phone 之後,就無聲無息了。

 

剛正式發佈一天,可能還會有更多遷移問題待發現

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • .NET Core 2.0發佈日期:2017年8月14日 前言 這一篇會比較長,介紹了.NET Core 2.0新特性、工具支持及系統生態,現狀及未來計劃,可以作為一門技術的概述來讀,也可以作為學習路徑、提綱來用。 對於.NET Core 2.0的發佈介紹,圍繞2.0的架構體系,我想通過一個系列來全 ...
  • Controller methods and views 控制器方法與視圖 2017-3-7 9 分鐘閱讀時長 作者 By Rick Anderson We have a good start to the movie app, but the presentation is not ideal. ...
  • 0基一維數組的性能是最佳的.因為可以使用一些特殊的IL指令. 16.1 初始化數組元素 16.2 數組轉型 元素為 引用類型 的數組,如果 維數相同 ,且元素源類型到目標類型 存在隱式或顯式轉換 ,CLR 允許將數組元素從一種類型轉型另一種. CLR不允許將值類型元素的數組轉型為其他任何類型 ,不過 ...
  • 最近在抽取nopCommerce實現插件化的代碼來實現一個簡單的插件化開發模式的框架,後面發現訪問網頁的時候會出現“安全性異常”的錯誤。 錯誤截圖如下: 解決方案: 把Web.Config中的<trust level="Medium" />節點替換為<trust level="Full" origi ...
  • 1.首先是建審計存儲表 並建立實體 2.EF工作單元類的實現(百度有很多實現方式) 這裡的AuthUserModel是當前用戶類 3.採用Autofac.Extras.DynamicProxy實現AOP 不知道Autofac.Extras.DynamicProxy能不能直接作用在方法上? 使用Aud ...
  • 一、直接使用C#操作資料庫的類庫ADO.NET ADO.NET使用Connection對象來連接資料庫,使用Command或DataAdapter 對象來執行SQL語句,並將執行的結果返回給DataReader或DataAdapter,然後 再使用取得的DataReader或者DataAdapter ...
  • 泛型集合lisit<>優點1.性能高 對值類型使用非泛型集合類,在把值類型轉換為引用類型,和把引用類型轉換為值類型時,需要進行裝箱和拆箱的操作。裝箱和拆箱的操作很容易實現,但是性能損失較大, 假如使用泛型,就可以避免裝箱和拆箱操作。 此為集合。 ArrayList list=new ArrayLis ...
  • 經歷了很久,.net core 2.0 終於發佈了! 之前一直用的core 1.1,升級了2.0後發現認證的機制(Auth)發生了比較大的變化,在1.1中認證配置是在Configure中完成,而在2.0中,認證配置則是在ConfigureServices中完成,剛好對調了一下。 話不多說,直接看代碼 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...