1. 程式人生 > >這些.NET開源專案你知道嗎?讓.NET開源來得更加猛烈些吧!(第二輯)

這些.NET開源專案你知道嗎?讓.NET開源來得更加猛烈些吧!(第二輯)

    在上個月發表的一篇文章:這些.NET開源專案你知道嗎?讓.NET開源來得更加猛烈些吧 ,得到了很多朋友的響應。同時也有很多朋友直接進行使用,反應非常棒,雖然不是每一個都用得上,只要有一個用得上,其實也不錯了,其他的就留著收藏,以後說不定用得上。最近再次整理一些比較實用的.NET開源元件,如果大家有興趣,下個月再整理2篇,分別是比較大型的和演算法方面的。還是發老樣子,每次精選15個我個人認為還比較有用,而且平時曝光度不高的。

    注意,本文所列出的.NET開源元件都是功能比較實用,但日常中曝光度比較少的,很多大家都知道的專案,我也沒必要再發出來了。可能部分已經放棄更新了,但並不能說就不能用了,對於新手來說,可以是一個學習的過程,同時很多小功能元件,並不需要多長久的更新,穩定就行了。


1.FluentValidation驗證元件

    FluentValidation是一個使用Linq表示式,非常流暢的小型業務物件驗證元件。流暢也可以說優雅。類似鏈式操作。易於理解,功能完善。還可以配合MVC使用直接在頁面進行驗證,當你看到它的語法時,非常優雅,非常令人心動。看如下官網提供的一段驗證程式碼:

using FluentValidation;
public class CustomerValidator: AbstractValidator<Customer> {
  public CustomerValidator() {
    RuleFor(customer => customer.Surname).NotEmpty();
    RuleFor(customer => customer.Forename).NotEmpty()
		.WithMessage("Please specify a first name");
    RuleFor(customer => customer.Discount).NotEqual(0)
		.When(customer => customer.HasDiscount);
    RuleFor(customer => customer.Address).Length(20, 250);
    RuleFor(customer => customer.Postcode).Must(BeAValidPostcode)
		.WithMessage("Please specify a valid postcode");
  }
  private bool BeAValidPostcode(string postcode) {
    //custom postcode validating logic goes here
  }
}
Customer customer = new Customer();
CustomerValidator validator = new CustomerValidator();
ValidationResult results = validator.Validate(customer);

bool validationSucceeded = results.IsValid;
IList<ValidationFailure> failures = results.Errors;

    不僅可以使用Linq的操作,還能自帶驗證返回資訊。更重要的是,元件內部已經封裝好了10幾種驗證器。當然可以自定義一個複雜的哦。核心dll檔案也不大,130多k。如果好用,可以自己移植到自己的系統哦。直接更好。

    NuGet Packages:Install-Package FluentValidation

    ASP.NET MVC整合包:Install-Package FluentValidation.MVC5 

2.Expression Evaluator表示式計算

    Expression Evaluator是一個輕量級的可以在執行時解析C#表示式的開源免費元件。表示式求值應該在很多地方使用,例如一些工資或者成本核算系統,就需要在後臺動態配置計算表示式,從而進行計算求值。

本文曾在【原創】.NET開源表示式計算元件介紹與使用一文中介紹過一個.NET平臺開源的表示式計算元件NCal。不過經過比較還是這個Expression Evaluator比較強大,雖然部分功能有重疊。也都能計算常規的數學表示式。

    Expression Evaluator支援的特性有:

支援算術運算子,支援關係運算符,以及邏輯運算子

支援表示式分組和括號,以及遞增遞減運算子

支援表示式屬性訪問以及動態型別,支援字串的+運算

支援數值型別的字尾d/f/m/l/u/ul、

支援隱式表示式,以及成員訪問操作符(.)

支援一些預設的型別,如double, float, char, string, DateTime, Convert, Math

支援foreach迴圈

。。。等等,更多功能還期待你的使用和發現

    簡單的數值表示式就不演示了,看一個比較有新意的程式碼:

class MyClass
{
	 public string[] myExternalString;
	 public int x;
}

var v = new MyClass();
v.myExternalString = new string[] { "Hello", "there", "World!" };
v.x = 2;
//關鍵點,註冊符號v
registry.RegisterSymbol("v", v);
//動態計算屬性
//返回結果是"there",因為v.x=2,2/2=1,所以返回索引1的值
"v.myExternalString[v.x/2]"

3..NET 基礎類庫

     幾乎每個搞.NET的人都多多少少會積累自己的常規基礎類庫,比如XXhelp,XXUntil之類的。都是一些簡單功能的封裝。同樣開源的基礎類庫也很多,這裡就介紹幾個,按需選擇,不一定都要用,可以提取部分出來給自己用了。

3.1 Craig's Utility Library

     功能性的基類。已經包裝得很完善,可以安裝單個名稱空間的包。例如官方列出了:

DataTypes: Install-Package CraigsUtilityLibrary-DataTypes
LDAP: Install-Package CraigsUtilityLibrary-LDAP
SQL: Install-Package CraigsUtilityLibrary-SQL
Encryption: Install-Package CraigsUtilityLibrary-Encryption
Caching: Install-Package CraigsUtilityLibrary-Caching
Math: Install-Package CraigsUtilityLibrary-Math
Validation: Install-Package CraigsUtilityLibrary-Validation

    。。。。。。。。。

   包括了資料型別轉換,加密,Web,ORM,壓縮,快取,數學計算,檔案格式,隨機數,反射,IOC,驗證等基礎功能模組。自己去看看了,太多了,一時半會不一定都用得上。     

3.2 .NET Extensions

    顧名思義就是.NET的擴充套件類庫了。核心功能包括對現有.NET名稱空間的大量擴充套件方法,如:

System.Array,
System.Collections.Generic.ICollection<T>,
System.Collections.Generic.IEnumerable<T>,
System.Data.DataRow,
System.Data.DataRowView,
System.Data.IDataReader,
System.DateTime,
System.DateTimeOffset,
System.Dictionary,
System.Exception,

    。。。。。。

    都是細節性的,就不過多的描述了,自己看吧。

3.3 C# Developer Utility Library

     這個開發人員工具庫功能模組也很上面的差別多,有集合,配置,加密,IO,網路,反射,序列化,文字,Web, 驗證,日期等的封裝。

4.PDFsharp & MigraDoc

  生成PDF檔案格式的文件,大家肯定有想過,很多人專案中也肯定用過,方法、元件肯定有很多。由於以前只是瞭解,並不實際操作,所以也不過多關注,偶然看到一款開源的操作PDF檔案的類庫,比較感興趣,花了點時間看看官方網站的說明,資料都比較齊全,所以推薦一下,以後有時間會寫篇文章具體介紹一下。

  PDFSharp元件主要特點有:
1.可以使用任何.NET程式語言動態建立PDF文件
2.很容易使用物件模型來構建文件
3.全部用C#重寫設計和編寫程式碼
4.可以生成PDF檔案和顯示在窗體或者列印,都使用同一原始檔
5.可以修改、合併或者分割PDF檔案
6.可以控制圖片的透明度,嵌入了字型

5.Chaow Framework

    Chaow Framework準確來說,也是一個開發人員基礎工具箱,只不過我認為和3中介紹的幾個有稍微的區別,這個主要是體現在寫法上,擴充套件方法的使用更加優雅。如果你認為和上面3中介紹的一樣,其實也無可厚非,看看它的幾個簡單例子,管中窺豹吧。

var matchQuery = new {
    BirthDate = 1.January(2000),//建立日期
    Iam = Sex.Man,
    LookingFor = Array.Enum<Sex>(), //建立性別列舉型別
    AgeRange = 18.To(25)            //建立數值範圍
}

    函數語言程式設計方法:

Func<int, int> fibo = null;
fibo = x => fibo(x - 1) + fibo(x - 2);
fibo = fibo.When(x => x <= 1, x => x); 
fibo = fibo.Memoize();                 
var result = fibo(38);

    還有諸如排列組合生成,集合運算相關的擴充套件方法。

6.Javascript.NET

    Javascript.NET是一個將Google V8 Javascript引擎整合和引入到CLI環境的工具,它可以在執行的過程中,使用C#程式碼來執行JavaScript程式碼。威力強不強大,還是看程式碼吧:

using (JavascriptContext context = new JavascriptContext())
{
	//設定引數
	context.SetParameter("console", new SystemConsole());
	context.SetParameter("message", "Hello World !");
	context.SetParameter("number", 1);
	//JS 指令碼
	string script = @"
		var i;
		for (i = 0; i < 5; i++)
			console.Print(message + ' (' + i + ')');
		number += i;
	";
	//執行指令碼
	context.Run(script);
	// 獲取引數值
	Console.WriteLine("number: " + context.GetParameter("number"));
}

7.ClearScript

     ClearScript的功能和上面的Javascript.NET是類似的,不僅可以動態的在.NET應用程式中新增JavaScript指令碼,還可以新增C#指令碼,相當於動態執行C#程式碼,當然這樣的功能元件在前面一篇文章也介紹過,這個元件支援Google的 V8, 微軟的JScript 和 VBScript引擎。功能同樣也不含糊,看程式碼,由於js是本人的硬傷,不多說了:

using System;
using Microsoft.ClearScript;
using Microsoft.ClearScript.V8;

//建立引擎
using (var engine = new V8ScriptEngine())
{
    engine.AddHostType("Console", typeof(Console));
    engine.Execute("Console.WriteLine('{0} is an interesting number.', Math.PI)");

    engine.AddHostObject("random", new Random());
    engine.Execute("Console.WriteLine(random.NextDouble())");

    engine.AddHostObject("lib", new HostTypeCollection("mscorlib", "System.Core"));
    engine.Execute("Console.WriteLine(lib.System.DateTime.Now)");

    engine.Execute("person = { name: 'Fred', age: 5 }");
    Console.WriteLine(engine.Script.person.name);
}

8.SharpKit程式碼轉換

    這貨是一個將C#程式碼轉換為JavaScript程式碼的開源工具,雖然是和.net平臺應用有點相反,但總歸是一個奇葩角色,感覺很有意思,沒玩過。。。那天實在要寫js程式碼了,用它試試看。

9.NAudio音訊處理

     NAudio是一個.NET平臺開源的音訊和MIDI程式庫,包括大量音訊處理相關.NET功能模組,可以加速開發。一直在程式更新中。目前有大量的成熟軟體使用了NAudio,例如下面一些軟體或者開源專案都有用到,所以應該很成熟,下面一些元件本身也是開源的,可以進行學習和使用參考:

  • Skype Voice Changer - Modify your voice with audio effects while talking on Skype
  • .NET Voice Recorder - Record your voice, save to MP3, and visualise the waveform using WPF. 
  • Pree - Record spoken word without the need for editing.
  • Q2Cue - application for running audio cues in a theatrical or other performance related settings
  • TuneBlade - Stream Windows' audio to AirPlay receivers
  • Teachey Teach - utility to help English language conversation teachers generate feedback for students
  • Sound Mill - an audio player, list organizer and automation manager
  • SIPSorcery - .NET softphone framework
  • Squiggle - A free open source LAN Messenger
  • Helix 3D toolkit - Multi-format audio player
  • airphone-tv - A revival of axStream to implement control through the iPhone
  • JamNet - a Silverlight drum sample player
  • Jingle Jim - Jingle Software (German language)
  • iSpy - Open Source Camera Security Software
  • RadioTuna - Online internet radio player
  • AVR Audio Guard - utility to fix a HDMI related issue

10.Software Protector序列號生成

     說簡單的,這個東西就是序列號生成器,用來保護應用程式的授權的。可以生成和驗證不同型別的序列號(20位),能限制時間(最多999天),還能夠鎖定特定機器的key。這個元件是GUI介面,核心使用的是SKGL(Serial Key Generating Library)元件。所以使用的時候還是一起吧,地址如下:

11.Toxy文件資訊抽取

    Toxy是一個獲取資料和文件資訊的抽取框架, 支援日常很多常見的格式,如docx, xlsx, xls, pdf, txt, epub, html等等。

    有意思的是,這個框架的開發者是Tony Qu,也是大名鼎鼎的NPOI的主要開發者。贊一個,NPOI總的來說非常好用。期待越來越強大,因為網際網路的資料除了html之外,還有大量的文件格式,如果快速的檢索抽取這些元資料資訊,是非常有用的。

12..NET Assembly 資訊獲取

     這個比較簡單,是獲取.net程式集資訊的一個小功能元件。如下面這個圖顯示的程式集的相關資訊:

1.jpg

相關推薦

這些.NET開源專案知道.NET開源來得更加猛烈!第二

    在上個月發表的一篇文章:這些.NET開源專案你知道嗎?讓.NET開源來得更加猛烈些吧 ,得到了很多朋友的響應。同時也有很多朋友直接進行使用,反應非常棒,雖然不是每一個都用得上,只要有一個用得上,其實也不錯了,其他的就留著收藏,以後說不定用得上。最近再次整理一些比較實用的.NET開源元件,如果大家有

這些.NET開源專案知道?.NET平臺開源文件與報表處理元件集合(三)

    在前2篇文章這些.NET開源專案你知道嗎?讓.NET開源來得更加猛烈些吧 和這些.NET開源專案你知道嗎?讓.NET開源來得更加猛烈些吧!(第二輯)中,大夥熱情高漲。再次拿出自己的私貨,在.NET平臺處理文件相關的開源元件。文件處理在開發中是一個非常常見的任務了,例如匯出Excel,匯出Word,

這些.NET開源專案知道.NET開源來得更加猛烈

注意:有網友提出部分專案停止更新的事情,這個問題我特意注意過,很多都是小功能元件,功能穩定,沒有bug,沒更新是正常的。夠用就行了。其次技術支援的事情,對開源免費來說,不能太強求,這裡釋出的都是小功能元件,一般看原始碼也比較好理解,各取所需。當然有最好。。   長期關注和使用.NET開源專案,給我帶來了很多

Docker技術這些應用場景,知道

docker docker應用場景 場景一:節省項目環境部署時間1.單項目打包每次部署項目到測試、生產等環境,都要部署一大堆依賴的軟件、工具,而且部署期間出現問題幾率很大,不經意就花費了很長時間。Docker主要理念就是環境打包部署,可在任意Docker Engine運行。前期我們只需要將每個項目環境

5大移動/前端開源專案知道幾個?

5大移動/前端開源專案Freeline、ARouter、BeeHive和Weex、antd,你都知道嗎? BeeHive:一種大型iOS專案解耦框架,BeeHive框架意義在於將高複雜度的應

【程式設計初學者】建立自己的開源專案6-基於當前分支,提交歸併請求到主分支myeclipse+git

    上一章講解了如何在主分支上建立新的分支,並將程式碼提交到遠端程式碼庫中的新分支上。然而,我們對外發布程式碼的時候,是基於主分支(以下簡稱master分支)釋出的。那麼我們就需要將自己分支的程式碼同步到master分支上。於是引出來上一章最後一個問題:那提交到遠端程

移動端適配方案-解析度來的更猛烈

前言 公司許多的業務都還停留在使用px和彈性佈局來進行樣式處理的階段,有些時候是因為視覺要求,有些時候是害怕線上問題,所謂破而後立。 移動端適配方案是一個老生常談的話題,但是對於不同的專案、不同的業務場景可能會需要不同的適配方案來進行移動端適配,向下相容的baseline也需要提前訂好。 整體寬高 其

第12期 《暴風雨來得猛烈!》 8月刊

1、分佈一致性 —— 任傑   自薦理由:分散式一致性簡單解析,這裡的Consistency(一致性)是指分散式系統中的資料一致性,而非資料庫事務ACID特性中的Consistency。 2、spring-data-redis-註解方式實現快取 —— 楊曉風   自薦理由:此

如何iOS 保持介面流暢?這些技巧知道

作者:ibireme這篇文章會非常詳細的分析 iOS 介面構建中的各種效能問題以及對應的解決思路,同時給出一個開源的微博列表實現,通過實際的程式碼展示如何構建流暢的互動。 Index 1.演示專案 2.螢幕顯示影象的原理 3.卡頓產生的原因和解決方案 CPU 資源消耗原因和解決方案

Java這些冷知識知道

除了 數據 多核 語言 cli 字母 不知道 scrip 導致 1)jvm有很多種,其實jvm是一個標準,sun做的那個叫hotspot,作者就是後來v8的作者lars bak,其他公司也做過jvm,其中做得比較好的有bea的jrockit,其他的包括ibm的r9,appl

Python通向百萬程序員的秘籍!這些技巧知道?99%的不知道

concat code 等價 基本 count except args bug 描述符 Python神奇方法是指一些允許在自定義類中增加“神奇”功能的方法。而在Python官方文檔中,有關這些方法的介紹或描述不僅內容分散,而且組織結構也相對松散。本文便對Python

場外交易系統的這些優缺點知道

一些業內人士認為,OTC是必不可少的市場,世界上第一個全棧式加密貨幣生態系統公司Bcause創始人認為:“如果某些幣種具有流動性,那麼它完全可以通過場外交易流通。” 儘管OTC具有隱祕、快捷、出入金方便等優點 1、“點對點”更靈活、點對點交易系統開發 進行大額交易的人大多選擇OT

雲端計算的這些優勢知道

雖然虛擬化技術能夠通過對伺服器負載、桌面,以及應用程式進行虛擬化,幫助企業解決這些問題,但某些挑戰依然存在。例如,隨意對伺服器負載進行虛擬化會導致虛擬機器的漫延,在解決一個問題的同時造成另一個問題。 雲端計算通過為業務提供改善敏捷度同時降低成本的新方法,有助於解決這些問題。例如,通過為 I

知道?未來我國大資料應用技術的發展將涉及這些熱點領域 大資料

在貴州省貴陽市舉行的2018中國國際大資料產業博覽會上,參觀者在參觀城市網路安全運營中心。新華社記者 陶亮 攝 近日釋出的《中國大資料應用發展報告》顯示—— 目前,我國網際網路、移動網際網路使用者規模均居全球第一,有著豐富的資料資源和顯著的應用市場優勢。隨著打

這些行業知識知道

  可能我們每天都在使用瀏覽器搜尋各種未知的問題,那你知道瀏覽器的發展史嗎?你可知道微軟,Google和雅虎競爭搜尋市場的歷史?有可能你會說,我又不care,it’s not of my bussiness!? OK,沒問題,那我們繼續往下看。   那首先我們得

#程式設計師,這些IDE的優缺點都知道?總有適合

1:eclipse   這是應用比較廣泛的一款針對於Java的IDE,其本身是一個框架平臺,但是支援很多的外掛,如C++和Python的,它可以及時檢查以及糾正你程式碼中的錯誤,並且你只需點下滑鼠就可以完成編譯執行,非常適合新手上手,而且是完全免費的。但是因為其啟動速度較慢,

制定程式碼規範並不難,但知道如何它可執行

策劃:erichua23 編輯:郭蕾 回想起來自己工作這麼些年,也經歷了不少團隊,經歷的專案更不算少了, 但是要說到程式碼規範, 問我我經歷的這些程式碼規範是不是滿意,我不得不如實回答:不是很滿意。當然我自己的程式碼規範和風格也沒有完全固化下來,近一年左右也開始關注到這個問題,為了讓自己的程式碼風

用Java這麼多年,這些祕密知道

對於這些祕密中的每一個,重要的是要注意它們中的一些,例如數字下劃線和快取自動裝箱在應用程式中可能是有用的,但是其他的(如單個Java檔案中的多個類)已被降級到backburner一個原因。因此,僅僅因為語言中存在的功能並不 意味著它應該被使用(即使它不被棄用)。相反,判斷應該用於何時應用這些隱藏功能。在研究好

知道?張小龍的四小時演講沒有用過這些

昨晚(1月9日)微信之父張小龍的拖堂四小時演講,讓不少網友認真“研讀”。而網友@崔翔宇_採銅則發現了一個奇怪的現象,有很多大家都在說的詞,耳朵裡聽出老繭的詞,張小龍一個字都沒提。正是因為張小龍沒有提,我們看到了更多值得思考的東西。網友@崔翔宇_採銅把張小龍的講稿(張小龍4小時“拖堂”演講,全面總結微

HashMap這些問題知道

HashMap是Java面試中的常考點之一,而且其<Key,Value>結構也是開發中常常用到的結構之一。或許你使用過HashMap,但是你知道下面這些問題嗎? HashMap的底層結構是什麼? 如果你能說出是陣列+連結串列,那麼你知道1.8版本之後引入的紅黑樹嗎? 說道紅黑樹,你知道它的結