這些.NET開源項目你知道嗎?讓.NET開源來得更加猛烈些吧!(第二輯)
在上個月發表的一篇文章:這些.NET開源項目你知道嗎?讓.NET開源來得更加猛烈些吧 ,得到了很多朋友的響應。同時也有很多朋友直接進行使用,反應非常棒,雖然不是每一個都用得上,只要有一個用得上,其實也不錯了,其他的就留着收藏,以后說不定用得上。最近再次整理一些比較實用的.NET開源組件,如果大家有興趣,下個月再整理2篇,分別是比較大型的和算法方面的。還是發老樣子,每次精選15個我個人認為還比較有用,而且平時曝光度不高的。
注意,本文所列出的.NET開源組件都是功能比較實用,但日常中曝光度比較少的,很多大家都知道的項目,我也沒必要再發出來了。可能部分已經放棄更新了,但並不能說就不能用了,對於新手來說,可以是一個學習的過程,同時很多小功能組件,並不需要多長久的更新,穩定就行了。
.NET開源目錄:http://www.cnblogs.com/asxinyu/p/4329755.html
本文原文地址:這些.NET開源項目你知道嗎?讓.NET開源來得更加猛烈些吧!(第二輯)
1.FluentValidation驗證組件
FluentValidation是一個使用Linq表達式,非常流暢的小型業務對象驗證組件。流暢也可以說優雅。類似鏈式操作。易於理解,功能完善。還可以配合MVC使用直接在頁面進行驗證,當你看到它的語法時,非常優雅,非常令人心動。看如下官網提供的一段驗證代碼:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
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。如果好用,可以自己移植到自己的系統哦。直接更好。
官方網站:https://github.com/JeremySkinner/FluentValidation
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循環
。。。等等,更多功能還期待你的使用和發現
簡單的數值表達式就不演示了,看一個比較有新意的代碼:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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]"
|
官方網站:http://csharpeval.codeplex.com/
3..NET 基礎類庫
幾乎每個搞.NET的人都多多少少會積累自己的常規基礎類庫,比如XXhelp,XXUntil之類的。都是一些簡單功能的封裝。同樣開源的基礎類庫也很多,這里就介紹幾個,按需選擇,不一定都要用,可以提取部分出來給自己用了。
3.1 Craig's Utility Library
功能性的基類。已經包裝得很完善,可以安裝單個命名空間的包。例如官方列出了:
|
1
2
3
4
5
6
7
|
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,驗證等基礎功能模塊。自己去看看了,太多了,一時半會不一定都用得上。
官方網站:https://github.com/JaCraig/Craig-s-Utility-Library
3.2 .NET Extensions
顧名思義就是.NET的擴展類庫了。核心功能包括對現有.NET命名空間的大量擴展方法,如:
|
1
2
3
4
5
6
7
8
9
10
|
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,
|
。。。。。。
都是細節性的,就不過多的描述了,自己看吧。
官方網站:http://dnpextensions.codeplex.com/
3.3 C# Developer Utility Library
這個開發人員工具庫功能模塊也很上面的差別多,有集合,配置,加密,IO,網絡,反射,序列化,文本,Web, 驗證,日期等的封裝。
官方網站:http://scrimpnet.codeplex.com/
4.PDFsharp & MigraDoc
生成PDF文件格式的文檔,大家肯定有想過,很多人項目中也肯定用過,方法、組件肯定有很多。由於以前只是了解,並不實際操作,所以也不過多關注,偶然看到一款開源的操作PDF文件的類庫,比較感興趣,花了點時間看看官方網站的說明,資料都比較齊全,所以推薦一下,以后有時間會寫篇文章具體介紹一下。
PDFSharp組件主要特點有:
1.可以使用任何.NET編程語言動態創建PDF文檔
2.很容易使用對象模型來構建文檔
3.全部用C#重寫設計和編寫代碼
4.可以生成PDF文件和顯示在窗體或者打印,都使用同一源文件
5.可以修改、合並或者分割PDF文件
6.可以控制圖片的透明度,嵌入了字體
官方網站:http://www.pdfsharp.net/(X(1)S(dokpp5uzvpyo5mdcr0pwadxu))/MainPage.ashx
5.Chaow Framework
Chaow Framework准確來說,也是一個開發人員基礎工具箱,只不過我認為和3中介紹的幾個有稍微的區別,這個主要是體現在寫法上,擴展方法的使用更加優雅。如果你認為和上面3中介紹的一樣,其實也無可厚非,看看它的幾個簡單例子,管中窺豹吧。
|
1
2
3
4
5
6
|
var
matchQuery =
new
{
BirthDate = 1.January(2000),
//創建日期
Iam = Sex.Man,
LookingFor = Array.Enum<Sex>(),
//創建性別枚舉類型
AgeRange = 18.To(25)
//創建數值范圍
}
|
函數式編程方法:
|
1
2
3
4
5
|
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);
|
還有諸如排列組合生成,集合運算相關的擴展方法。
官方網站:http://chaow.codeplex.com/
6.Javascript.NET
Javascript.NET是一個將Google V8 Javascript引擎集成和引入到CLI環境的工具,它可以在運行的過程中,使用C#代碼來執行JavaScript代碼。威力強不強大,還是看代碼吧:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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"
));
}
|
官方網站:https://github.com/JavascriptNet/Javascript.Net
7.ClearScript
ClearScript的功能和上面的Javascript.NET是類似的,不僅可以動態的在.NET應用程序中添加JavaScript腳本,還可以添加C#腳本,相當於動態執行C#代碼,當然這樣的功能組件在前面一篇文章也介紹過,這個組件支持Google的 V8, 微軟的JScript 和 VBScript引擎。功能同樣也不含糊,看代碼,由於js是本人的硬傷,不多說了:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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);
}
|
官方網站:http://clearscript.codeplex.com/
8.SharpKit代碼轉換
這貨是一個將C#代碼轉換為JavaScript代碼的開源工具,雖然是和.net平台應用有點相反,但總歸是一個奇葩角色,感覺很有意思,沒玩過。。。那天實在要寫js代碼了,用它試試看。
官方網站:http://sharpkit.net/
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)
- All My Music
- iSpy - Open Source Camera Security Software
- RadioTuna - Online internet radio player
- Fire Talk New - chat program
- AVR Audio Guard - utility to fix a HDMI related issue
官方網站:http://github.com/naudio/NAudio
10.Software Protector序列號生成
說簡單的,這個東西就是序列號生成器,用來保護應用程序的授權的。可以生成和驗證不同類型的序列號(20位),能限制時間(最多999天),還能夠鎖定特定機器的key。這個組件是GUI界面,內核使用的是SKGL(Serial Key Generating Library)組件。所以使用的時候還是一起吧,地址如下:
官方網站:http://softwareprotector.codeplex.com/
11.Toxy文檔信息抽取
Toxy是一個獲取數據和文檔信息的抽取框架, 支持日常很多常見的格式,如docx, xlsx, xls, pdf, txt, epub, html等等。
有意思的是,這個框架的開發者是Tony Qu,也是大名鼎鼎的NPOI的主要開發者。贊一個,NPOI總的來說非常好用。期待越來越強大,因為互聯網的數據除了html之外,還有大量的文檔格式,如果快速的檢索抽取這些元數據信息,是非常有用的。
這里有一篇作者的介紹文檔,看起來很牛逼:http://blog.neuzilla.com/2015/03/02/getstartedwithtoxy/
官方網站:http://toxy.codeplex.com/
12..NET Assembly 信息獲取
這個比較簡單,是獲取.net程序集信息的一個小功能組件。如下面這個圖顯示的程序集的相關信息:




官方網站:http://assemblyinformation.codeplex.com/
