日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET Core 2.0 的dll实时更新、https、依赖包变更问题及解决

發布時間:2023/12/4 asp.net 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET Core 2.0 的dll实时更新、https、依赖包变更问题及解决 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天所有開發環境已經遷移到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 之后,就無聲無息了。

相關文章:

  • .NET Core 2.0 正式發布信息匯總

  • .NET Standard 2.0 特性介紹和使用指南

  • .NET Core 2.0使用NLog

原文地址:http://www.cnblogs.com/kvspas/p/7086396.html


.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注

總結

以上是生活随笔為你收集整理的.NET Core 2.0 的dll实时更新、https、依赖包变更问题及解决的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。