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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...