几个不常见但非常出色的 .NET 开源库
NLog
NLog 目前最为出色的 .NET 日志库,非常容易配置,且极具灵活性。最重要的是与 log4net 相比,NLog 的开发很活跃。顺带提一句,NLog 完全兼容 Mono。
Mono.Cecil
.NET IL代码及 Assembly 操纵库,可以不需要把 DLL 加载到内存就能够分析其中的元数据和类型,也能够创建 Assembly。此库被广泛应用于涉及 IL 代码分析和生成的领域。
NRefactory
NRefactory 提供了对 C# 和 VB.net 代码的解析和编译功能。你可以通过 NRefactory 把一段 C# 源程序解析成抽象语法树,甚至还能够进行语义分析和生成 IL代码。换句话说,NRefactory 把一个 C# 编译器以 API 的形式提供给你,让你有能力在程序运行时处理 C# 代码,实际上,NRefactory 的核心就是一个修改过的 Mono C# 编译器。NRefactory 在很多地方是非常有用的,一个最简单也是最实用的例子:C#中的 LINQ 表达式通常是静态的,也就是你写的 from x in y where xxx 最终是被编译器转化成了表达式树的形式。因此, C# 程序在运行的时候是无法如 SQL 一般通过字符串来拼凑出 LINQ 表达式并执行的,但通过 NRefactory 提供的编译器级别的能力你就能够做到这一点。
Irony
Irony 号称是“编译器构造工具”,实际上是一个类似 C++ Boost.spirit 的 LALR 语法分析生成器,但与 C++ Boost.spirit 不同的是 Irony 是在运行时生成解析器,而不是靠各种奇技淫巧的模板元编程。拜 C# 的操作符重载能力所赐,Irony 的语法定义已经很接近 EBNF 的定义了,相当简洁。如果有简单的文本文件解析的需要的话,Irony 应该是不错的选择。稍显遗憾的是 Irony 的解析器不是泛型的,只能解析 string 不能解析字节流,而且目前 Irony 还处于 alpha 阶段,并不适合生产使用。
Ionic.Zip(DotNetZip)
Ionic.Zip 是一个非常轻量级的 Zip 文件访问库,提供了压缩和解压缩 zip 文件的功能,相对于常见的 Sharpzip 库,Ionic.Zip 的优点在于轻量级,只有一个很小的 DLL。且 Ionic.Zip 的MS-PL授权形式更加开放,对商业应用更加友好。
Dapper, OrmLite 与 Simple.Data
这三个都是极轻量级的 ORM 工具,基本功能就是从 POCO 对象转换为 SQL 查询与SQL查询结果转换为 POCO 对象,由于它们都只在 ADO.NET 上做了一层非常薄的封装,因此性能非常高,跟直接用 ADO.NET 相差无几。相对与 NHibernate 和 ADO.NET EF 这样的全功能 ORM 框架来说,轻量级 ORM 基本上都不支持更改跟踪之类的高级功能,但是比起手工拼接 SQL 方便和安全很多。三个库都支持完全意义上的 POCO 对象,不像 NHibernate 要求对象的属性 virtual 的,可以说没有一点儿侵入性。特别要说的是 Dapper,这个库只有一个 .cs 源文件,而且没有限制数据库,只要有 ADO.NET 驱动的都可以,这一点是另外两个都做不到的。另外,OrmLite 有个特性可以跟据 POCO 对象自动建表,对于数据库的操作因此方便了很多,但其目前支持 SQLite 和 SQL Server 不能不说是很大的遗憾。
最后的结论就是,如果你目前:还在用 .NET 1.0 时代的 DbHelper 或者 SqlHelper、不满意 NHibernate/ADO.NET EF 的性能、直接用 ADO.NET 的话,这三个工具都可以很好地帮助你以微小的性能损失为代价换来更好与更安全的数据库访问层设计。
转自http://www.cnblogs.com/sjrhero/articles/2395706.html
Call Me:Mail此处省略好
几个不常见但非常出色的 .NET 开源库的更多相关文章
- 常见的LINUX发行版安装libiconv库方法
今天编译程序,发现程序报错,如下 cannot find -liconv collect2: ld returned 1 exit status 或者 undefined reference to ` ...
- 概率论中常见分布总结以及python的scipy库使用:两点分布、二项分布、几何分布、泊松分布、均匀分布、指数分布、正态分布
概率分布有两种类型:离散(discrete)概率分布和连续(continuous)概率分布. 离散概率分布也称为概率质量函数(probability mass function).离散概率分布的例子有 ...
- Visual Studio工具 vcpkg简介
博客参考: https://blog.csdn.net/cjmqas/article/details/79282847#43-%E7%A7%BB%E9%99%A4%E5%85%A8%E5%B1%80% ...
- 常见的Web实时消息交互方式和SignalR
标签: WebSocket SignalR 前言 1. Web消息交互技术 1.1 常见技术 1.2 WebSocket介绍 1.3 WebSocket示例 2. Signal 2.1 SignalR ...
- Python程序的常见错误(收集篇)
关于Python Python是一门解释性的,面向对象的,并具有动态语义的高级编程语言.它高级的内置数据结构,结合其动态类型和动态绑定的特性,使得它在快速应用程序开发(Rapid Applicatio ...
- C/ C++ 常见编程问题
C 中容易忽略的问题 1.在C语言中,浮点型变量分为两类: a. 单精度型:类型说明符为float, 在Turbo C 中占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,可提 ...
- Android开发中常见的设计模式
对于开发人员来说,设计模式有时候就是一道坎,但是设计模式又非常有用,过了这道坎,它可以让你水平提高一个档次.而在android开发中,必要的了解一些设计模式又是非常有必要的.对于想系统的学习设计模式的 ...
- IntentActionUtil【Intent的常见作用的工具类】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 主要用于通过Intent调用手机本地软件打开文件(doc.xsl.pdf.ppt.mp3.mp4等格式).安装apk.发送邮件.拨打 ...
- 【转】常见的Web实时消息交互方式和SignalR
https://www.cnblogs.com/Wddpct/p/5650015.html 前言 1. Web消息交互技术1.1 常见技术1.2 WebSocket介绍1.3 WebSocket示例 ...
随机推荐
- linux系统下搭建自己的web服务器
之前在windows 2008 server上搭建了一个用于测试的web服务器,但是在打开网站的时候特别的慢,尤其是图片的加载都会失败,当时以为是路径的问题,但是在服务器上自己打开都特别慢,自己实在找 ...
- 如何在ios手机端的Safari浏览器 中“查看网页源代码”
在这里给大家分享一个很简单的用苹果手机无需越狱就可以查看网页源代码的方法,不过这个方法只用于苹果手机自带的Safari浏览器 随便添加一个safari 书签 (用于一会改为查看源码功能书签)进入书签 ...
- 关于Eclipse插件开发(一)
plugin.xml是插件和Eclipse内核的接口,Eclipse就像一所大宅子.它的外墙(plugin.xml)有很多门(扩展点), 要熟练进入这座大宅子,就得先搞清楚它有那些门(扩展点). 插件 ...
- 线程本地变量ThreadLocal
一.本地线程变量使用场景 并发应用的一个关键地方就是共享数据.如果你创建一个类对象,实现Runnable接口,然后多个Thread对象使用同样的Runnable对象,全部的线程都共享同样的属性.这意味 ...
- orale做报表常用函数和表达式的总结
最近一段时间连续的做了几十张报表,通过原生sql对数据进行分析 ,也算是有了一定的了解,发现其中一些函数和表达式使用频率较高,现总结如下: (1).round()函数 round函数说白了就是把一 ...
- 301页面转向 php
新建301.php页面,在程序入口文件index.php引用301.php页面 301.php内容如下,仅用于参考: <?php$the_host = $_SERVER['HTTP_HOST'] ...
- (转)MySQL数据表中带LIKE的字符匹配查询
MySQL数据表中带LIKE的字符匹配查询 2014年07月15日09:56 百科369 MySQL数据表中带LIKE的字符匹配查询 LIKE关键字可以匹配字符串是否相等. 如果字段的值与指定的 ...
- scala学习笔记:理解lazy值
scala> var counter = 0 counter: Int = 0 scala> def foo = {counter += 1; counter} foo: Int scal ...
- 精妙SQL语句介绍
说明:复制表(只复制结构,源表名:a 新表名:b) SQL: select * into b from a where 1<>1 说明:拷贝表(拷贝数据,源表名:a 目标表名:b) SQL ...
- [转]Windows Shell 编程 第四章 【来源 http://blog.csdn.net/wangqiulin123456/article/details/7987933】
第四章 文件的本质 以前,所有文件和目录都有一个确定的属性集:时间,日期,尺寸,以及表示‘只读的’,‘隐藏的,‘存档的’,或‘系统的’状态标志.然而,Windos95(及后来的WindowsNT4.0 ...