CYQ.Data 正式支持 DotNET Core 版本發佈

来源:http://www.cnblogs.com/cyq1162/archive/2017/12/04/7969062.html
-Advertisement-
Play Games

大約是上周五,在提交CYQ.Data V5.5.8.1版本到Nuget後,看著C盤還有7G發了一會呆。之後做了一個決定,卸載了VS2015,現在C盤有10個G。到了微軟官網,下載了社區版,把VS2017給裝上了, ...


閑話幾句:

自從上周開始,IOS人員逝去,就開始接手IOS的代碼了。

並開始整理IOS的代碼(包括當時一開始設計的開發框架)。

在未來不遠的日子里,設想是有一個系列詳細的介紹I戀App和IT連App及前後端所有涉及的技術系列。

同時還準備發佈一個IOS的開發框架,為十二星座再湊一個成員。

閑話結束,下麵看正文: 

CYQ.Data 支持DotNet Coe 的折騰過程:

大約是上周五,在提交CYQ.Data V5.5.8.1版本到Nuget後,看著C盤還有7G發了一會呆。

之後做了一個決定,卸載了VS2015,現在C盤有10個G。

到了微軟官網,下載了社區版,把VS2017給裝上了,好在可以選組件,只挑.NET Core 相關的,5個多G就完事。

 

   

安裝好之後,建一個類庫工程,把整套源碼Copy過去,依賴項就是我們平時引用dll的地方:

開始編繹,並見證奇跡:一堆錯誤。

 

還好,VS2017在錯誤提示方面很人性化,分批給你顯示錯誤數,讓你解決一批再出來一批。

不像當初在VS2015折騰.NET Core 1.1的時候,一下子出來幾百個錯誤,梁靜如都救不了你。

面對錯誤:怎麼處理、支持Dotnet Core ?

折騰.NET Core 1.1的時候:

那時候是把CYQ.Data的源碼給重構整理了一次,把不支持的都單獨給抽離出來。

像這樣,比如那時候不支持序列化,就把涉及序列化的都抽出來放到一個文件:

通常一個類,會分拆出幾個partial的部分類(不支持的用於被排除)

 

想法挺好:

通過排除某些文件夾的方式,來達到切換的狀態,這樣可以不用維護兩份代碼。

但是:

要達到去掉文件夾還能編繹完整通過的解O方式,由於有些是強關係,關是業務整理,工作量大的出奇。

一些代碼還得修改為反射的動態調用,才能達到分離文件也正常,好不麻煩。

關鍵還是那時候的版本缺失的類庫太多,折騰沒幾天,放下了,回頭才是岸。

 

折騰.NET Core 2.0:

1:想過針對性的寫一個迷你版本。

但沒那麼簡單,要有激情,要有大量時間,這些條件要同時滿足不容易。

同時意味著又多一個要維護的框架,雖然我維護中的框架已數不過來,多一個也不算多。

可時間對於認真的人,總是不夠用啊!!!

 

2:通過增量方式,解決版本支持問題

上面說到,折騰 .NET Core 1.1 時,是想通過減量排除來解決問題,結果不得其門。

事情放一放,一回頭,解決問題的方式,就是來的那麼巧,那麼妙。

這回很理所當然的,就想到用增量的方式來解決問題。

CYQ.Data 如何通過增量代碼支持.NET Core

對於每一個提示不存在的類,VS環境中滑鼠放上去時,都會有一個提示重構,通過它可以減少不少工作量。

1:為每一個不支持的類、方法、或屬性,都用重構的方式,重新生成一個類文件,並用對應的名稱空間整理放好。

通過這種方式,整理出不支持有差異化的類庫,而且也可以清楚知道,框架里引用了哪些類是 .NET Core所沒有的。

然後先順利編繹通過。

 

2:重寫新建類庫的實現,比如,重寫讀配置文件:

using CYQ.Data;
using System.IO;
using CYQ.Data.Tool;
using System.Collections.Specialized;

namespace System.Configuration
{
    internal class ConfigurationManager
    {
        static string appSettingJson = string.Empty;
        static ConfigurationManager()
        {
            string filePath = AppConfig.WebRootPath + "appsettings.json";
            if (System.IO.File.Exists(filePath))
            {
                appSettingJson = File.ReadAllText(filePath, Text.Encoding.UTF8);
                if (!string.IsNullOrEmpty(appSettingJson))
                {
                    appSettingJson = appSettingJson.Replace("\\\\", "\\");
                }
            }
        }
        private static NameValueCollection _AppSettings;
        public static NameValueCollection AppSettings
        {
            get
            {
                if (_AppSettings == null && !string.IsNullOrEmpty(appSettingJson))
                {
                    string settingValue = JsonHelper.GetValue(appSettingJson, "appsettings");
                    if (!string.IsNullOrEmpty(settingValue))
                    {
                        _AppSettings = JsonHelper.ToEntity<NameValueCollection>(settingValue);
                    }
                }
                if (_AppSettings == null)
                {
                    return new NameValueCollection();
                }
                return _AppSettings;
            }
        }
        private static ConnectionStringSettingsCollection _ConnectionStrings;
        public static ConnectionStringSettingsCollection ConnectionStrings
        {
            get
            {
                if (_ConnectionStrings == null)
                {
                    _ConnectionStrings = new ConnectionStringSettingsCollection();
                    if (!string.IsNullOrEmpty(appSettingJson))
                    {
                        string settingValue = JsonHelper.GetValue(appSettingJson, "connectionStrings");
                        if (!string.IsNullOrEmpty(settingValue))
                        {
                            NameValueCollection nv = JsonHelper.ToEntity<NameValueCollection>(settingValue);
                            if (nv != null && nv.Count > 0)
                            {
                                foreach (string key  in nv.Keys)
                                {
                                    ConnectionStringSettings cs = new ConnectionStringSettings();
                                    cs.Name = key;
                                    cs.ConnectionString = nv[key];
                                    _ConnectionStrings.Add(cs);
                                }
                            }

                        }
                    }
                }
               
                return _ConnectionStrings;
            }
        }
    }
}  

配置文件和System.Web這兩個是經常用到的東西。

相對配置文件的讀取,System.Web的,麻煩了一些,需要Nuget上引用Microsoft.AspNetCore:

 

引用好後,再重寫裡面的內容,具體的內容,這裡就不貼代碼了,代碼可以見源碼處。

由於這周末兩天臨時集中處理,剛處理好,只做了簡單的MSSQL的測試。

所以來不及發佈Nuget上,先寫文了,等哪天測試穩定了再上Nuget。

CYQ.Data 支持.NET Core 的方法:

1:GitHub下載CYQ.Data的源碼(會發現多了一個文件夾)

地址:https://github.com/cyq1162/cyqdata

 

由於目前還沒提交解決方案文件可以直接運行項目,所以現在提前提前體驗的需要自己建類庫項目了:

2:自己新建一個類庫項目,取名叫CYQ.Data,把源碼都Copy過去(包括DotNetCore)

3:Nuget上引用Microsoft.AspNetCore。

編繹,然後就大功告成了,在你的.NET Core 項目里引用類庫項目就可以了。

如果涉及到Web,還需要有兩個註入的地方:

在MVC項目中調用app.UseStaticHttpContext()。

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            app.UseStaticHttpContext();
            .....
	 }
在沒有註入 HttpContextAccessor的項目中,還需在ConfigureServices 方法中調用
services.AddHttpContextAccessor();

 

 

總結:

一個周末,一個巧合,一個連續的激情奮戰。

CYQ.Data 的.NET Core支持工作,就這樣告一段落了。

測試了MSSQL是基本通過,剩下的都好說了!!!

後面Taurus.MVC還是Aries,估計離支持.NET Core也不遠了。

 

不過,接下來,又要進入IT連創業的狀態了。

對於IT連,結合一些網友的建議,最近也有不少思考。

對接下來的產品優化及走向,又一波傷腦估計是在所難免。

另外,運營還缺的一篇文章,回頭也還得補上。

最後的最後,仍是感謝大伙的關註!!!


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

-Advertisement-
Play Games
更多相關文章
  • 在多線程應用中將會涉及不同的線程訪問同一控制項的問題,C#中禁止跨線程直接訪問控制項。某個控制項在被創建時就記下了是誰創建了它,即它的創建線程。如果從另一個線程調用該控制項,那麼必須使用控制項的 Invoke 方法來將調用封送現在調用它的線程。(Invoke方法是控制項的方法) 到底是哪個線程要使用該控制項呢?需 ...
  • .net-Excel導入-OleDB方式(備註:表頭在第二行/不在第一行 的解決方法) ...
  • CAD二次開發可以採用寫擴展DLL的方式實現。該DLL的函數可以被CAD調用。 但是調用前,必須用命令netload 將該dll載入到CAD。 其實可以修改註冊表,當CAD軟體啟動後,自動載入擴展DLL。 為此,我寫了一個函數,很方便的修改註冊表,達到自動載入dll的目的! 該函數支持各個版本cad... ...
  • 將 vs iso 文件載入到驅動器,進入到文件夾里 然後輸入:vs_ultimate.exe /uninstall /force ...
  • 1、能提供Visual Studio開發工具包嗎? 解決方法: Visual Studio 2017開發環境下載地址: https://www.visualstudio.com/zh-hans/downloads/ Visual Studio 2015及之前的版本開發環境下載地址: https:// ...
  • 一、 環境vs2010,WCF應用程式,server 2008 第一步:WCF項目右鍵點擊項目,選擇生成部署包,如下圖: 第二步:WCF項目上右鍵,選擇:在windows資源管理器中打開文件夾,如下圖: 第三步:第二步:在你項目所在的文件目錄下找到Package文件夾,這就是我們的部署包所在的地方。 ...
  • 首先,在WIN系統下打開IIS,每種操作系統是不同的,請不要弄混。 1、控制面板 左下放的程式 啟用或關閉Windows功能,如圖: 2、找到Internet Information Services,其中FTP伺服器,WEB管理工具下麵的所有文件夾及其子文件夾全選,令萬維網服務中的安全性、常見HT ...
  • 一、概述 Windows Communication Foundation(WCF)是由微軟發展的一組數據通信的應用程式開發介面,可以翻譯為Windows通訊介面,它是.NET框架的一部分。由 .NET Framework 3.0 開始引入。 WCF的最終目標是通過進程或不同的系統、通過本地網路或是 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...