月度归档:2012 年十月

C#开源资源大汇总[转]

一、AOP框架
Encase 是C#编写开发的为.NET平台提供的AOP框架。Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式。这种部署方面(aspects)的方法帮助缺少经验的开发人员提高开发效率。

NKalore是一款编程语言,它扩展了C#允许在.net平台使用AOP。NKalore的语法简单、直观,它的编译器是基于Mono C#编译器(MCS)。NKalore目前只能在命令行或#Develop内部使用。NKalore兼容公共语言规范CLS(Common Language Specification),它可以在任何.NET开发环境中使用,包括微软的Visual Studio .NET。

PostSharp读取.NET字节模块,转换成对象模型。让插件分析和转换这个模型并写回到MSIL。PostSharp使开发程序分析应用程序容易得像分析代码规则和设计模式,它使程序开发的思想变革为面向方面软件开发(AOSD/AOD)思想。

AspectDNG的目标是为.NET开发人员提供简单而功能强大的AOP-GAOP实现。它效仿java下的开源工具AspectJ 和 Spoon,成熟程度也很接近它们。

RAIL(Runtime Assembly Instrumentation Library) 开源项目可以在C#程序集加载和运行前进行处理控制调整和重新构建。C#在CLR中,我们已经能够动态加载程序集并且获得程序集中的类和方法,RAIL(Runtime Assembly Instrumentation Library)的出现填补了CLR处理过程中的一些空白。

SetPoint是一款.NET框架下的全功能(full-featured)AOP引擎.它着重为称为语义切点(semantic pointcuts)的定义依赖RDF/OWL的使用.它的功能为一个IL-level,highly dynamic weaver&LENDL,一个引人注目的定义语言、、、、、、

DotNetAOP为 CLR language提供AOP 框架基础属性。

NAop是一个DotNet下的AOP框架。

AspectSharp是DotNet下的免费AOP框架,它以Dynamic Proxies和XML作为配置文件。

二、Ajax框架

Ajax.NET Professional (AjaxPro)是最先把AJAX技术在微软.NET环境下的实现的AJAX框架之一。它在客户端脚本之上创建代理类来调用服务器端的方法。

MagicAjax.NET是一款在ASP.NET下创建Web页面提供AJAX技术的框架。它使开发人员很容易把AJAX整合到他们的页面而不需要替换ASP.NET控件或自己写javascript脚本代码。

Anthem.NET是为ASP.NET开发环境提供的开源AJAX工具包,它可以运行于ASP.NET 1.1和2.0。

三、工作流(workflow)

Workflow.Net是使用微软.Net技术基于wmfc标准的创建工作流引擎。

NetBPM是JBpm移植到.net平台下的一款开源工作流软件。NetBpm可以很容易和.Net应用程序集成在一起,可以创建,执行和管理工作流程序。

Bpm Tool支持将业务模型转换成软件模型。业务开发人员可以使用模型驱动的方法设计,实现,执行和跟踪业务流程。因此开发人员能够更容易的关注业务逻辑的变化。

三、文本编辑

FCKeditor是一款功能强大的开源在线文本编辑器(DHTML editor),它使你在web上可以使用类似微软Word 的桌面文本编辑器的许多强大功能。它是轻量级且不必在客户端进行任何方式的安装。

FreeTextBox 是一个基于 Internet Explorer 中 MSHTML 技术的 ASP.NET 开源服务器控件。这是一款优秀的自由软件(Free Software),我们可以轻松地将其嵌入到 Web Forms 中实现 HTML 内容的在线编辑,在新闻发布、博客写作、论坛社区等多种 Web 系统中都会有用途。

VietPad是一个功能完整的跨平台的Java/.NET的Vietnamese Unicode开源文本编辑器。支持打开,编辑,打印,转换,排序,和保存基于文本的Unicode格式的Vietnamese文件。

NetSpell是一款.NET框架下的开源拼写检查引擎。

PPC_edit是一款应用在Pocket PC上的开源文本编辑器,它支持TXT, RTF, HTML, WordML, DocBook 和 ZIP格式的文件,屏幕上会显示国际标准的软键盘。

四、博客(Blog)

NovaShare是一款Blog引擎,它使你创建基于交互式的web的新闻和论坛网站,很像WonkoSlice或Slashdot。管理员可以发布文章和发起投票,浏览者可以创建用户帐号,发表议论等等。

dasBlog是从BlogX 网上日志引擎发展而来。像Trackback ,Pingback 一样增加许多附加的特征,有完整的Blogger/MovableType API支持,API注释,完整的Radio-style模板定制,支持Mail-To-Weblog/POP3的附件和内嵌图片,基于WEB的DHTML,OPML,配置的编辑器。

DotText是一个被使用了数百个blogs的强劲的blog引擎。这是一个N-tiered应用的例子。

tBlogger是一个C#开发的完整的blog网站程序,使用XML配置。

五、系统构建

.NETZ是一款免费开源工具,它可以压缩和打包微软 .NET 框架可执行文件(EXE, DLL)以使他们更小。更小的可执行文件占用的磁盘空间较少且因为读取文件时对磁盘的访问较少而使读取数度更快。它和PE(portable executable)打包工具不一样,.NETZ是使用 C# 编写的存粹的 .NET 解决方案。.NETZ可以用来打包几乎每一种 .NET 支持的语言编写的程序。.NETZ支持 .NET EXE 和 非共享(non-shared)的 DLL 文件。压缩过的程序能以相同的方式解压缩这些对最终用户是透明的。

NAntContrib为NAnt提供定制任务的工具。

Prebuild是XML驱动的一款跨平台pre-build工具,使开发人员很容易就可以为IDE和.NET开发工具生成项目或构建文件。它支持Visual Studio .NET 2002, 2003, 2005, SharpDevelop, MonoDevelop 和 NAnt。

BusyBeeBuilder是.NET平台下功能强大,易于使用,可扩展的开源构建自动操作工具。

Draco.NET 是 Windows 服务应用程序。它的设计使其容易持续的集成新特性。Draco.NET监视你的源代码储存库。当探测到你的项目有变化时自动重新创建项目并把包含变化列表的创建结果发送到你的Email。

Build Studio为软件的自动构件处理提供了一套完整的解决方案。

CruiseControl.NET是.NET平台下的一款整合服务器。

NAnt类似Apache项目下的Ant,是.Net下的开源构建工具。适用在自动编译.NET应用的场合,如.NET项目的每日构建(nightly build)。

五、图表制作

ZedGraph是C#编写的.NET类库,提供了用户控件和web控件。它可以创建2D的线性图、条形图和饼图。它功能完整且有详细的功能自定义,不过使用默认的选项就足够好用了。一款类似 PieChart, StackBar, LineChart的C#开源图表组件。

NPlot是一款.NET下的开源图表类库.它值得称道的地方是优雅且灵活的API设计.NPlot包含了Windows Form控件, ASP.NET控件和一个创建Bitmap图片的类。还有一个可用的GTK#控件。

XSCharting是C#开发的图表组件,提供了多种多样的图表选项。

DaveChart是一个免费的DotNet类库。

NChart 提供了很多值得应用在商业,教育等多个领域的2 D图表。

六、聊天系统

Dot Net Chat server是基于DotNet框架开发的聊天服务器和客户端项目。

七、内容管理系统(CMS)

Ludico是C#编写的居于ASP.NET 2.0的Portal/CMS系统。它的模块化设计是你可以按照你希望的使用或开发网站功能。它里面有高级的用户管理,一个所见即所的(WYSIWYG)的编辑器等。

mojoPortal是一款C#开发的面相对象网站框架,它可以运行于Windows的ASP.NET 和GNU/Linux 或Mac OS X的Mono的平台上。

Cuyahoga是C#开发的灵活的CMS / Portal 解决方案。它可以运行于Microsoft .NET 和Mono 平台,支持SQL Server, PostgreSQL或MySQL作为底层数据库。

Umbraco是一款在.net平台下C#开发的开源内容管理系统,该系统效率,灵活,用户界面都不错。

Kodai CMS是.NET平台下的一款功能齐全的内容管理系统。

Rainbow项目是一款使用Microsoft”s ASP.NET和C#技术开发的有丰富功能的开源内容管理系统。

NkCMS是使用ASP.net和Sql server 2000开发的内容管理系统。

Amplefile是一款内容管理系统,是.Net环境下的windows应用程序,使用了.Net remoting.

Go.Kryo是一个用ASP.NET(C#).NET 实现的简单的内容管理系统,后台数据库使用Microsoft SQL Server 。

ndCMS是 ASP.net (C#)下的一个内容管理系统。它提供了用户管理,文件管理,一个WYSIWYG编辑器,模板管理,拼写检查和内置的http压缩。ndCMS的目标是提供一个简单而快速的方式部署.Net站点以节省你的时间和金钱。

八、代码覆盖(Code Coverage)

NCover是.NET框架下的C#版本代码覆盖分析工具。NCover可以对程序进行 line-by-line 的代码覆盖统计。

九、论坛系统

YetAnotherForum可以作为ASP.NET开发的网站的论坛或是留言板。它使用MSSQL作为底层数据库。

十、开发工具(IDE)

SharpDevelop是一个DotNet平台下的免费开发工具,支持C#和VB.NET。

MonoDevelop是可以支持C#和其它符合.Net规范的开发语言的IDE。

C# Studio是 C#/Mono/GTK# 开发者的一个简单的IDE。

十一、安装制作

izfree是一套套免费的工具用于帮助创建使用Microsoft””s Windows Installer 技术的安装程序。使用izfree你可以为你的应用程序制作强劲的安装程序。

Windows Installer XML (WiX)可以重XML源文件创建Windows程序安装包的工具集。它支持命令行方式,开发人员可以把结合它来创建MSI和MSM安装包一个可以和商业软件安装产品相比的开源打包工具。

十二、IoC容器

Spring.net是从java的Spring Framework移植过来的。java的Spring包含了许多功能和特性,在当前的Spring.net都有提供。Spring.net最初发布的版本包含了一个很有特色的IoC容器。

Castle是一组应用开发的工具,内含一个简单的IoC容器。

StructureMap是.NET环境下的一个轻量级依赖注入工具,StructureMap也是一个灵活的、可扩展的通用“插件”机制的.NE

十三、Bug追踪

BugNet是一款C#编写的基于Web的开源Bug跟踪系统。

BTsys是一款轻量级的开源桌面Bug跟踪系统,是C#和ADO.NET实现。一个Bug记录和跟踪的解决方案,支持文件附件和注释历史。

BugTracker.NET是使用ASP.NET 和 C#开发的基于web的开源Bug跟踪系统。需要SQL Server 或 MSDE支持。它安装简单,容易使用,功能强大。

BugBye是一款ASP.NET和C#开发的基于web的Bug跟踪系统。

十四、日志工具

log4net是一个可以帮助程序员把日志信息输出到各种不同目标的.net类库。它可以容易的加载到开发项目中,实现程序调试和运行的时候的日志信息输出,提供了比.net自己提供的debug类和trace类的功能更多。log4net是从java下有卓越表现的log4j移植过来的。它是apache基金资助的项目的一部分。

NLog是C#编写的开源日志类库,它的设计思想是使其简单而灵活。NLog让你处理诊断的日志消息,用相关信息扩充消息,依照你的选择格式化日志消息和把日志消息输出到一个或多个目的地。

LogThis是为.NET应用程序提供的一款C#开源日志框架,它可以嵌入到应用程序之中。

AppLog是一个简单的应用日志工具。它使用C#开发,且使用ByteFX MySQL 数据访问库.。

C#开发的可扩展日志工具,有高级消息队列支持,可以异步使用。

CSharp Logger是apache继log4net项目后设计的又一个日志工具。它用来向Windows的事件日志写入debug、info、warn和error四个等级的信息。

十五、网络客户端

.NET FTP Client是C#编写的开源类库。

.NET Telnet是微软.NET Framework下的C#开发的开源telnet类库。它的灵感来至Java Telnet Application。

metro这个项目是C#编写的类库,它提供了一套丰富的类使开发IP version 4, TCP, UDP and ICMP等工作更容易。它包含了有很有用的工具如包嗅探器,网络分析工具例如路由跟踪,ping等。

LJ.NET是LiveJournal站点的客户端。它为LJ在线日志服务提供了简单而强大的用户接口。

NET VNC Viewer 是一款完全用C#开发的开源VNC观察器。它兼容Smartphones, Pocket PC和Windows的电脑(.NET CF or .NET Framework)。它比起其它观察器的优点是可以在Pocket PC上全屏显示而且可以旋转屏幕。

GVDownloader允许你从google videos, metacafe, putfile, youtube, break.com 和更多的地方快速下载内含的视频和多媒体。它的包含一个强劲IE插件和位于你系统托盘的独立程序。

DotNetOpenMail能够使你在微软.net框架开发的asp.net, WinForm应用程序发送Email。它是C#编写的开源组件,它不需要使用System.Web.Mail类库就可以容易的创建带附件HTML和Plain-text的Email。程序员不需要知道很多相关的细节就可以使用不同的字符集或不同的MINE编码来创建multipart/alternative,multipart/related和multipart/mixed的MIME消息。

DotMSN是一款独立的开源类库,它不需要和官方的MSN Messenger交互,因此不必安装MSN Messenger就可以使用DotMSN和MSN Messenger服务通信.DotMSN是C#编写的,所以.NET环境支持的语言都能够使用.DotMSN类库使用简单而且实现方便。它灵活,坚固,轻量级利于整合到任何应用系统.使用DotMSN的应用系统能实现从创建消息机器人到自定义客户端等各种不同的功能.如果你的应用程序需要和Messenger服务通信,DotMSN是一个不错的工具.

SharpSSH使用C#实现了SSH2协议,它支持SSH, SCP 和 SFTP.

OpenPOP.NET一组和POP Servers通信的.NET类库。

IceChat是为连接多样的IRC Servers设计的Internet Relay Chat Client。

lphant是为edonkey/emule开发的开源客户端程序。

.NET FTP Client C#开发的类库。

OpenSmtp.net 是 C# 开发的开源SMTP组件。它不依赖.NET Framework 的System.Web.Mail 包中的类。允许开发人员使用不同于MS SMTP的SMTP 服务器且提供了web service而可以通过HTTP发送email。

网络服务器

ODC(#)H是一款C#编写的开源hub software,它功能强大,消耗的资源少且支持插件功能。

Dawn of Light (DOL)是第一个开源的Dark Age of Camelot (DAOC)游戏服务器,你可以创建自己的服务器且自己设计游戏内容。DOL使用.Net Framework框架的C#编写,使用XML和MySQL存储数据,支持Windows和Mono平台。

NeatUpload可以让ASP.NET开发人员把磁盘上的文件通过流的方式上传并且可以监视上传进度。它是开源的且在 Mono”s XSP/mod_mono和微软的ASP.NET下运行得一样好。包含2个自定义控件:*用户可以通过INPUTFILE选择一个要上传的文件。

ProgressBar可以用进度条方式或弹出窗方式显示上传进度。当JavaScript可用时ProgressBar是用类似AJAX的无刷新方式展现,但也允许JavaScript不可用的用户见到上传进度。

NMail ,C#开发的开源程序,提供SMTP 客户端和服务器, POP3 和 IMAP4 服务器。

FTP.NET是使用C#编写的开源多线程FTP程序。

CSharp Email Server C# Email Server是 Java Email Server (JES) 的C#版本。

PDF类库

PDFsharp是一款可以让.NET框架支持的任何语言很容易的创建PDF文件的类库。

ASP.NET FO PDF 是一款C#编写类似于ASP.NET服务器控件的控件。它接受DataTable 和一些其它参数来创建XSL FO,并使用NFOP (Apache FOP Port in J#) PDF Formatter来绘制一个类似PDF Report 的DataGrid 。今后将会增加更多的标签来可以生成XSL FO 。

Report.NET 开源类库包含了生成精确PDF文档的类。它是.NET平台下的C#编写的,可以帮助你创建简单的灵活的PDF文件。你可以从任何ADO.NET的DataSet取得数据来创建PDF文档。ASP.NET可以用Report.NET来创建动态的PDF响应页面。

SharpPDF是可以用来简单的创建PDF文件的C#类库。它创建的文件百分白兼容PDF格式。

iTextSharp是一款开源的PDF操作类库,使用它可以快速的创建PDF文件。http://hardrock.cnblogs.com/ 是一个关于 iTextSharp的中文Blog。

持久层框架

NHibernate是一个面向.NET环境的针对关系型数据库的对象持久化类库。 NHibernate来源于非常优秀的基于Java的Hibernate关系型持久化工具。 NHibernate从数据库底层来持久化你的.Net对象到关系型数据库。NHibernate为你处理这些,你不用自己写SQL去数据库存取对象。你的代码仅仅和对象关联,NHibernat自动产生SQL语句,并确保对象提交到正确的表和字段中去.大量减少开发时人工使用SQL和ADO.NET处理数据的时间. NHibernate可以帮助你消除或者包装那些针对特定数据库的SQL代码,并且帮你把结果集从表格式的表示形式转换到一系列的对象去。因此对于那些在基于.NET的中间层的应用中,它们实现面向对象的业务模型和商业逻辑的应用,NHibernate是最有用的。

FileHelpers Library是一款C#编写的开源 .NET 类库。它使用简单,很容易就可以从固定长度文件或界定记录(CSV)读/写数据。它也支持从不同的数据存储格式(Excel, Access, SqlServer)导入/导出数据。

Websharp是国人开源的一款开源持久层框架,它的目标是设计一个基于.Net的通用的应用软件系统的框架,以简化基于.Net平台的企业应用软件的开发。目前,Websharp关注于企业应用软件的以下几个方面:1、数据库访问 2、 O/R 映射 3、 AOP 4、 分布式访问

ObjectBroker是.NET平台下的一款开源O/R映射框架。它支持对象缓存,1:1, 1:n 和 m:n的关联映射等特性。

Gentle.NET是一款开源的与关系数据库(RDBMS)无关的对象持久层框架,可以自动生成SQL和对象结构。它拥有一个SQL工厂用来创建自定义查询、DataView构建助手和卓越的性能和完善的文档。

Ubik是C# 2.0下的ORM持久层框架,当前是WinForms应用程序开发提供的.它支持OPath的子集而可以进行面向对象查询,且包含一个网络事件系统.

NDal是一个数据提取层(DAL)框架,它可以运行在.NET和Mono环境下。

Persist.NET是C#编写的一款完整的持久层框架。

ObjectBroker是.NET平台下的数据库对象/关系映射(O/R Mapping)框架。

iBATIS.NET帮助你的应用系统创建更好的持久层框架。

Advanced Data Provider是为ADO.NET提供的动态数据提供者。可以让应用程序透明的访问不同的ADO.NET 数据提供者。

OJB.NET是一款.NET平台下的对象/关系映射(O/R Mapping)工具。

门户系统

OmniPortal基于一种web-portal-kernel(Web门户核心)的思想而构建的开源基础框架,它解决了安全控制、主题和本地化等。你可以基于 OmniPortal 来更容易的创建任意的Web应用系统(例如 ERP, CMS, CRM)。它支持Mono 和.Net 。对于Web开发人员来说,OmniPortal为他们提供了一款优秀的二次开发基础类库。

SharpNuke.NET是一款C#开发的基于 ASP.NET 的开源 Portal/CMS。最初是从流行的VB.NET开发的web portal系统DotNetNuke移植过来的的。以后的版本将会兼容 Windows和 Linux Mono。

Personal .NET Portal是一个基于Web的个人门户系统。它试图提供一种简单的方式建立个人网站,页面使用标签和模板创建。

My Community Portal提供了一个统一的Internet门户,作为论坛,群组,聊天,你自己的Email,搜索引擎,网络目录,个人主页,投票还有更多的功能入口。

剖析工具(Profilers)

Prof-It是一款独特易用的C#程序剖析工具。当保持对一个最小量的源代码的探测时,它为每一条语句测量执行频率。

NProf不仅仅是成熟的剖析程序,也是一套可以用来创建其它功能齐全的剖析程序的完整API,以及用可视化的工具扩展的默认GUI。

NProfiler,.NET平台下的一个应用程序剖析工具。

项目管理

SharpForge支持协作多个软件项目的开发和管理,它为你的团队提供类似 SourceForge 和 CodePlex的功能。SharpForge是C#开发的.NET 2.0开源项目。

User Story.NET是一个Extreme Programming 项目。

RSS和RDF工具

Rss Bandit是C#开发的开源RSS阅读器,它内建多国语系,支持Atom 1.0以及其他各种的RSS feed格式。它画面漂亮,拥有分页浏览功能,软件细部设置弹性度高。它的操作画面直观简单易懂,有一个很好的Command模式和ListViewEx来使用,可让使用者很快的上手。

iPodder.NET是一款C#编写的开源媒体收集器,它能自动帮你从互联网上下载音乐,能帮你轻松地从成千上万的音乐中选择你喜欢的。用它设置好订阅RSS feeds后,只要节目一有更新,它就自动下载了,你不必大量的浪费时间自己手工下载。它还整合了iTunes,创建播放列表和iPod同步功能,你可以用Apple iTunes或Media Player播放,也可以把音乐导入到你的iPod或其他MP3播放器中。

FeedExpress主要是让你订阅一些RSS/RDF资源,知名的如FeedExpress里的Subscriptions。它和Outlook Express让你订阅一些新闻组是一样的。

RSS.NET是一款操作RSS feeds的开源.NET类库。它为解析和编写RSS feeds提供了一个可重用的对象模型。它完全兼容RSS 0.90, 0.91, 0.92, 和 2.0.1等版本。

GtkSharpRSS是C#开发的开源RSS和RDF客户端,它用于 Mono, Gtk#, 和 RSS.NET。它也可以通过内嵌于Mozilla的窗口来显示内容。

Atom.NET是一款完全使用C#开发的开源类库,它的目标是提供便捷的方法来操作Arom Feeds。它提供一个对象模型来写入和解析Atom Feeds。它只兼容0.3Atom规范,可以运行于微软.NET 1.x,Mono 0.29 或更高版本。

NRss是为微软.NET框架和Mono下提供的开源类库,它读取RSS Feeds元素然后以树型结构来展现对象关系。

Aggie是一个新闻收集器,它是桌面应用程序,可以下载最新的新闻并通过web页面的形式呈现。

mail2rss是.NET下的 web service,它在你请求时检查你的电子信箱并返回包含电子信箱里的消息的 RSS feed。它是完全用C#开发的开源项目,没用使用任何第三方控件。

规则引擎

NxBRE是.NET平台下的一款开源轻量级的业务规则引擎(aka Rule Based Engine),它由正向串行的推理引擎(forward-chaining inference engine)和XML驱动流控制引擎(XML-driven flow control engine)组成.它支持 RuleML 0.9 Naf Datalog 和 Visio 2003 建模。

SRE (Simple Rule Engine)是.NET下的一款轻量级的开源正向串行的推理规则引擎(forward chaining inference rule engine)。它容易理解,可以解决复杂的问题。

搜索引擎

NLucene是Lucene的.NET版本。

DotLucene,Lucene.Net开源项目转向商业化后,DotLucene以Lucene.Net作为基础继续进行开发。

版本控制(CVS)

Porc是为CVS和项目管理工具提供了完整的图形化界面,它在CVS的基础上增加了一些有趣的功能。它是.NET平台下用C#编写的。

Sharpcvslib是C#语言编写的CVS客户端API。当前它为公共CVS命令提供了核心函数。

NetCvsLib是为.NET平台下C#开发的一个CVS客户端。它作为一个单独的程序集而实现,因而可以很容易的集成到其它项目中去。

SQL客户端

SqlBuddy是C#编写的一款用于Microsoft SQL Server和MSDE的开源工具,使用它可以很容易的编写SQL脚本。SqlBuddy提供的功能和查询分析器的目的有些微不同,它倾向于帮助使用者编写SQL。

QueryCommander是一款开源的Sql editor,模拟微软的查询分析器,Visual Studio的环境类型。QueryCommander的特点包括类似IntelliSense功能,自动注释,xml文档模型,xml2data等。

SQL Buddy是一款有特色的免费MSDE / Sql Server IDE,它是用.NET框架的C#编写。

Database Commander是Windows操作系统下的一款用户界面友好的数据库管理工具。

模板引擎

NVelocity 是一个以 .NET 为基础的模板引擎。它允许任何人通过简单而强大的模板语言来定义对象。

测试工具

NUnit一款单元测试框架,它可以应用于遵循.NET框架标准的所有语言下。NUnit最初是从JUnit移植过来的。NUnit完全使用C#编写且设计时考虑了多数.NET语言的特性,例如自定义属性和其它反射特性。

NMock是一款.NET平台下的基于动态代理的Mock模拟对象类库,用于C#开发。Mock对象使测试更简单,它测试单个组件或单个类时不需要其它所有组件真正实现。也就是说我们可以仅仅只是测试一个类,比起测试一个完整的对象关系树更容易查清楚Bug。Mock对象一般用于以测试为驱动的开发当中。

TestDriven.NET是一款和Visual Studio .NET无缝结合的测试插件。它可以和NUnit, MbUnit 和 Team System紧密结合。

Rhino.Mocks源于EasyMock.Net,它试图提供一种更简单的方法去创建和使用mock objects且使你得到更好的重构支持。它结合了EasyMock.Net和NMock的方式。

Dot NetUnit实现了XUnit 测试框架,是.NET平台下的单元测试组件。

EasyMock.NET是由Java实现的EasyMock到.net平台的一个移植版本的一组类库。它提供了一个简单的方法用来模拟接口和远程对象。

dotunit是JUnit移植到微软.net平台的测试框架。它可以实现自动化测试。

NUnitForms是NUnit的扩展。它为Windows Forms应用程序提供单元测试和压力测试,可以容易的用它为你的Windows Forms类进行自动化测试。

Web框架

NStruts 是java下大名鼎鼎的struts开源MVC框架的ASP.NET版本,是jakarta struts框架的一部分。

Maverick.NET是从Maverick移植来的.NET版本,是一款开源的 Web MVC框架.它专注于MVC逻辑,它支持丰富的模板和转换技术。

MaverickLite是ASP.Net下的一款简单的开源表现层框架。它在建立在Maverick.Net framework基础上。它使用front controller的方式来处理请求。

Ingenious MVC ,基于.NET 2.0的构MVC结构的应用程序,它包含即开即用(out-of-the-box)的特性支持ASP.NET和Windows Forms应用程序.它也可以在大多数方法中扩展和定制.

Websharp是.NET平台下的一款轻量级应用框架。

Email客户端

GmailerXP是为Google的Gmail服务提供了全套的工具开源程序。在线所能做的GmailerXP都允许用户做,它也整合了你任何时候在Gmail需要的其它一些程序的特点(GML, Gmailto,等)。

RemoteCalendars是C#开发的为Outlook 2003/2007提供的一款开源 COM-.NET 插件。安装完这款插件后,Outlook的用都可以用Outlook 2003/2007订阅、重新读取和删除远程iCalendar(RFC 2445)。

SharpWebMail是一款C#编写的ASP.NET下的EMail客户端。它通过POP3服务器接收邮件,通过SMTP服务器发送邮件。它的配置很简单(只需要在web.config 里面做几个设置)。

Web测试

NUnitAsp是一款自动测试 ASP.NET页面的开源工具. 它是从NUnit扩展来的。

Wiki引擎

Perspective是一款C#开源Wiki引擎,它使用户可以很容易的合作进行编辑,链接和共享Web页面,它里面有安全和分级的管理环境。Perspective居于奇妙的Wiki思想,包含了其它一些有前途且效果好的特性。

DevHawk Wiki是一款.NET平台下由C#实现的开源Wiki引擎。

ProntoWiki是使用VWD (Visual Web Developer)编写的C#开源wiki引擎,ASP.NET 2.0 和 SQLExpress 2005作为后台。Wiki引擎速度快且容易使用,提供了和 rich text editor 一样的文本标记( text markup )功能。它可以自动通过web接口接收图片和文件作为附件。另外,ProntoWiki的特点还有页面可以在贴出或更新之前预览,基于角色的用户认证,使用 web parts 自定义外观和布局,历史跟踪,和功能查询。

FlexWiki是一款使用.NET技术(C#和ASP.NET)编写实现的开源多人协作的写作工具。

Thufir提供了字处理和文档链接功能。它类似Wiki-Wiki ,且它具有“所见即所得”的界面。它还可以通过和Word交互来利用Word的拼写检查功能。

XML解析

ODF Add-in for Microsoft Word是一款开源的XML转换器,它提供的工具为在 Open XML Formats 和 Open Document Format(ODF)之间转换提供了桥梁。作为第一款这类组件,ODF Add-in for Microsoft Word 2007使你可以在Word里打开和保存ODF文档。

NDigester是Jakarta Commons-Digester 工具的.NET实现版本。提供了完整的对XML文档的处理控制。

SAX.NET是用来操作XML的简单的API。它是从最初在java上被广泛使用的API移植来的。

多媒体工具

FreeImage是为开发人员提供的开源类库项目,它支持多种流行的图片格式(PNG, JPEG, TIFF, BMP等).FreeImage简单,易用,快速,多线程安全,兼容所以32位的windows并且是跨平台的(Linux和Mac OS X).

TVGuide是一款显示通过简单而清晰的接口下载的TV列表的Windows程序。

DirectShow.NET Library 这个类库的目的是使你可以从.NET应用程序内部调用Microsoft””s DirectShow的功能。它支持Visual Basic .NET 和 C#,理论上应该是可以支持任何.NET语言。

iTunes Agent是和iTunes一起使用的C#开源MP3播放器。它可以使得在播放MP3时,播放列表与MP3自动播放器同步。

MeGUI是一款基于ISO MPEG-4的全面的GUI解决方案。它可以支持使用MPEG-4 ASP (XviD & libavcodec MPEG-4)标准的mencoder,使用MPEG-4 AVC (x264) 标准的x264.exe 或 mencoder,使用(HE)AAC audio标准的BeSweet、Nero AAC encoder和使用MP4 muxing标准的mp4box。

OpenImageManager是一款C#开发的新的开源图片管理器。它基于非常流行的图片查看器ACDSee(TM)的思想设计,它的功能有缩略图生成,HTML相册生成器,支持10种语言等等。

abrViewer.NET是C#编写的可以批量浏览和输出Adobe Photoshop的笔刷(.abr files)的开源工具。

MeWiG是使用.NET框架开发的Windows下的开源MEncoder(MPlayer的一个组成部分)。你能够转换成几乎任何视频资源,无需要命令行操作。

VTK.NET是.NET包装的Visualization Toolkit。你可以使用它来编写C#、C++、Visual Basic 或 J#的Windows Forms应用程序。它包含在设计时可拖拽的Windows Forms控件。

SubtitleCreator使你可以为你的DVD创建对白字幕。它拥有先进的同步特性,DVD预览,和一个简单的所见即所得(WYSIWYG)的编辑器。当然你也能够修改现有DVD的对白字幕的定位和颜色。

Paint.NET是在Windows下使用C#编写的一款出色的开源图像编辑器。

MediaPortal试图帮你把电脑变成一个高级的Multi-Media Center / HTPC。它允许你听你喜欢的音乐&收音机,看你的video和DVD,观看,确定和记录实况电视等其它功能。MediaPortal是开源的系统,你可以完全免费的获得它。任何人都可以帮组开发MediaPortal 或者根据自己的需要把Media Portal 进行调整。

C#游戏

Exult是可以在现在的操作系统上面运行Ultima7的游戏引擎,它提供了一个地图编辑器和其它的一些工具让你制作属于你自己的模型和游戏.

Ch2r是第一款为光晕2(Halo 2)提供的开源模型编辑器。

这是一款从在Palm平台上流行的Space Trader游戏移植的Windows版本。

EMU7800是C#编写的一款Atari 2600/7800模拟器。

BooGame是面相对象的 CLS-compliant,开源2D游戏引擎框架。它提供了高级的硬件加速video,audio,keyboard,mouse,内嵌脚本和许多图片格式。它使用C#开发的,目标是支持.NET 1.1, 2.0 和 Mono 平台。

RealmForge这款开源的.NET 3D游戏引擎前身是Visual3D.NET,它是一套使用C#、 .NET 2.0和XNA进行可视化设计和开发3D游戏、模拟软件和交互式环境的框架和工具集。

Pocket Sudoku是 Pocket PC (Windows Mobile)上的数独(Sudoku)游戏。它可以有五种不同等级的难度来创建数独(Sudoku)迷题,解答正确任何迷题,都会用铅笔标记。

CsGL在.Net框架下为OpenGL 1.1 – 1.4和许多扩展的支持提供支持.

文档工具

NDoc 可以将 C#.NET 编译生成的程序集和对应的 /doc XML 文档,自动转换成如 .NET Framework SDK 类库文档或者 MSDN Library 在线 .NET 类库文档形式的代码文档,让您快速拥有专业级的类库API 文档。

脚本语言

Sharp Vector Graphics (SVG#)是.Net框架下C#开发的文档对象模型。它帮助你在.Net平台上进行SVG开发。

IronPython是.NET平台上的Python的CodeName。它拥有一个完全动态的交互式解释器,可以支持所有的.NET类型库,并且集成了.NET Framework的诸多优点,甚至可以用Python的类来扩展.NET类。IronPython遵从ECMA的CLI标准(ECMA-335),可以运行在Microsoft .NET Framework和MONO上。

地理信息系统(GIS)

SharpMap是一款易于使用的地图渲染器,它可以为Web和Windows应用程序渲染GIS数据。SharpMap是使用C#编写,基于.NET 2.0框架上开发的开源项目。

monoGIS将成为Mono平台下的开源完整GIS。已经发布了internet mapserver,OGC WMS实现和一些工具像空间格式转换。

NASA World Wind 是C#开发的个人电脑上的开源的3D图形虚拟地球系统。它结合了美国国家航空航天局(NASA)从卫星拍摄的图像,这些图像应用于Blue Marble, Landsat 7, SRTM, MODIS 以及其它更多的地方。

其它C#开源项目

DockPanel Suite是一款开源的.Net Windows Forms开发环境下的停靠控件(docking)类库。它模仿Visual Studio .Net的效果开发的。

wx.NET是基于.NET通用语言基础结构 (CLI)的开源项目。它致力于开发一个基于.NET的GUI库,它按照wxWidgets的类层次用C#编写,可以在多种CLI下执行,包括.NET,Mono,和DotGNU Portable.NET。

MMC .NET类库是为Windows的MMC+Snapin开发提供支持而包装的一套开源类库。

DPAToolkit(Design Pattern Automation Toolkit)是应用设计模式设计应用程序的开源工具包,它有便捷的代码生成,反向工程功能。拖拽(Drag and Drop)方式便捷的创建UML类图。支持为代码生成,反向工程编写自定义插件。

mjbWorld 是一款开源的3D编辑器,它允许用户通过图形界面的选择和拖拽方式来编辑图形。它基于和应用X3D与VRML标准。该软件目的用于利用建立开放免费程序建立3D世界。同时它也可以用于其他免费开放软件程序之间进行数据交换。mjbWorld有Java, C# 和C++ /Qt等版本。

MonoCalendar是.NET平台下的开源日历程序,它的目的是为Mac平台之外的其它平台提供一款类似iCal的日历程序。

Data Tier Generator是一款微软 .NET平台下的开源项目,它为访问SQL Server 2000而生成存储过程的SQL Server 2000脚本和C#类。这些存储过程包含了Insert, Update, Delete, Select, 根据PK的Select, 根据FK的Select的SQL脚本。

Finisar.SQLite是.NET框架下的一款为存取SQLite-Databases提供的ADO.NET Data Provider。

Math.NET的目标是为提供一款自身包含清晰框架的符号运算和数学运算/科学运算,它是C#开发的开源类库。Math.NET含了一个支持线性代数的解析器,分析复杂微分,解方程等等功能。

Ascii Generator dotNET (ascgen2)是一款把图片转换成高质量的ASCII字符组合(ASCII art – text)。第一个版本支持变形和粗体字体,和实时调节输出。

GPSProxy是.NET Compact Framework下的开源程序。它通过COM口在Pocket PC之间拷贝GPS数据,可以把GPS数据格式从NMEA 0183转换成Garmin GPS。它是基于.NET Fra的Windows版本。

FOP C# Port这是Apache居于java的 XSL-FO 格式转换器的C#版本。它采用并扩展了XSL-FO标准使FOPs在可以嵌入.NET CLR管理代码应用。

转自:http://www.cnblogs.com/MaxIE/archive/2008/04/11/1148745.html

Quora使用到的技术[转]

以前向大家介绍过Stack Exchange的系统架构Facebook的系统架构,今天和大家说说Quora的。本文主要参考了Phil Whelan的这篇文章《Quora’s Technology Examined》。关于Quora是个什么网站我就不多说了,国内对他的C2C网站叫“知乎”。呵呵。我们还是来看看Quora的技术吧。

Search-Box

Quora只能搜索问题,主题标签,用户名,和主题标题。没有全文搜索,所以,你无法搜索问题和答案的内容。而搜索中使用前缀搜索方式,比如你输入mi,则Microsoft会马上出来。其搜索还会有一些非常简单的模糊匹配的算法。另外,如果有重复的问题,其中一个问题会自动跳转到另一个问题,但是在搜索中还是会出现。搜索中没有拼写检查。

一开始,他们使用的是一个开源的搜索服务器,叫Sphinx。其支持上述的那些功能。现在他们不用这个技术了,因为受到了一些限制。他们做了一个比较新的解决方案,这个算法由Python实现。

参看What libraries does Quora use for search?

实时查询

Quora的查询是非常高速的,其查询请求是通过AJAX的GET请求发送的,结果返回用的是JSON数据格式,但他们解析JSON是在服务器端,而不是通过浏览器的javascript。这么做的原因可能是他们想高亮搜索关键词,似乎使用Client端的Javascript非常不好做。

Quora的即时搜索好像比较暴力,如果你输入Microsoft(一共9个字符),你会看到其会像后端发送9次查询——每按一个键一次,无论你敲这个单词的速底有多快,每输入一个字符都会发一个请求给后台。对于这样的看上去没有效率的对后台的请求,后台的服务器端会来控制相关的前台请求,所以,就算是前台这样做,也不会增加服务器端的负载,因为后台会做相关的处理。

Quora的搜索使用HTTP长连接,当你开始敲查询的时候,连接就建立了,这个连接会持续在那里,你下次搜索的时候会继续使用这个连接,除非你60秒没有动作了。

参看Is Quora going to implement full-text search?

 

Webnode2 和 LiveNode

Webnode2 和 LiveNode 是 Quora 内部的系统,其用来管理内容。Webnode2  生成 HTML, CSS 和 JavaScript 并且和 LiveNode 紧紧地耦合在一起,Webnode2主要是用来管理内容在网页上显示的,LiveNode主要是用来做动态网页内容更新的。Charlie Cheever 说,如果他可以从新开始,他 第一件事要做的就是重写整个LiveNode.

Quora的工程师看上去对他们搞的这些东西非常的满意,并且 他们也在努力地找到这些东西的弱点。有一个有意思的关于LiveNode的问题是,如果A和B同时正在看相当的一个问题,那么用户A的一些交互动作会影响B的页面。例如,如果A顶了一下某个答案,那么这个答案可能会往上移动。这样的一个显示变化会通过AJAX更新B的浏览器。如果B此时展开了评论,可能会受到影响。

LiveNode 由这些东西写成:Python, C++, and JavaScript. jQuery ,Cython也用到了。

因为Quora 想要对他们的LiveNode开源 并准备把他们的代码分开,做这个事可能需要太多的工作和时间。

Charlie Cheever 指出 WebNode2 和 有一个叫做 “free and easy website builder” 的 Webnode 的 webnode.com 没有任何的关系。

参考 Tech Talk – Webnode2 and LiveNode

Amazon Web Service

Quora全部host在AWS的EC2和S3上,这对于这些刚刚起步的快速发展的公司非常关键,因为你可以省去了很多硬件和维护的成本。(建一个数据中心并不是所有公司都能干的事)。Quora的操作系统使用Ubuntu Linux,这是非常容易部署和管理。

其静态页使用了Amazon的CDN的 Cloudfront服务分发,CloudFront用于所有的静态图片, CSS 和JavaScript。图片先传到 EC2 服务器,使用 Pyhon S3 API 处理后后传到 S3。

HAProxy Load-Balancing

HAProxy 作为前端负载均衡服务器,反向代理服务器是 Nginx,Nginx 后面则是 Pylons (Pylons + Paste) , 承担动态 Web 请求。

Pylons,是一个轻量级的Web框架,通常都是在Nginx后面使用。选用Pylons就像你在春节先饺子当主食一样。他们把Pylons中的template和ORM取走而使用自己的技术(由Python写成),这个地方就是 LiveNode 和 WebNode2的地方

Python

从facebook出来的Charlie 和 Adam选用了Python而不是PHP。正如Adam指出的——“Facebook is stuck on that for legacy reasons, not because it is the best choice right now”(Facebook使用PHP并不是因为其好,而是因为历史原因的问题),当然他们也不会使用C#,因为那样一来就会引入一堆微软的东西。当然,也不会是Java,因为Python要比Java更容易写出代码,Scala太年轻了,还需要考验。Ruby看上来很像Python,但是他们对Ruby没有过多的经验。最终还是Python胜出。当然,他们知道Python的弱点是性能和速度,所以,他们在需要速度和性能的地方使用了C/C++。 他们使用Python的版本是2.6。

使用Python的另一个原因是Python的数据结构和JSON可以很好的映射起来。代码易读性很高。而且有很多的库,调试器和重载器。Quora的B/S结构几乎完全通过JSON进行数据交互。

他们没有使用IDE,他们使用得最多的是Emacs,一看就知道这是一个个人的选择,随着他们开发团队的扩大,这个事会得到改变的。

另外,他们提到了PyPy,一个让 Python更快更灵活的项目。

Thrift

Thrift 用于后端服务器间的通讯。Thrift  服务由 C++开发。Facebook同样使用了这个技术

参考Why would you write a Thrift service in C++?

Tornado

Tornado web 框架用于实时更新,其运行在Comet 服务器上,其用来处理大量的需要长时间poll和push更新的网络连接。

Long Polling (Comet)

Quora的网页并不是简单的显示,每一个页面都需要更新,或是创建问题,答案和评论。所以,他们使用了Long Polling而不是传统的Polling,传统的Polling需要浏览器一端不停地重复地向服务器询问——“有更新吗?”,服务器说没有,于是过一会浏览大再问,现在呢?服务器说,还是没有,浏览器过一会又问,现在呢?服务器说,还没好。这样一来,就好像让我们的客户端放到了驾驶室里,这显然是有问题的,因为只有服务器知道什么时候会有更新。而且浏览器这么干,很快会让服务器的负载加上去。

Long polling 也就是我们熟知的 Comet,其让服务器来控制这些事,让客服端等在那里听服务器的响应。在client和 server的会话对于两者是是相同的,而不是client需要等着然后向服务器查询。服务器端可以把一个连接打开很长时间(比如:60秒),在这段时间里,服务器会查看是否有相应的东西需要更新,如果有的话,就发给浏览器。如果没有的话,就等下一次的client询问。可见,这种服务器等一会再响应的方法可以让浏览器少发几次查询。

对于long-polling 的最好的地方是,可以降低浏览器和客户端间来来回回的次数。让服务器端来控制时间,所以,内容更新可能会只是几个毫秒,或是几十秒。 服务器端也可以积攒一堆更新后,一次发给浏览器。这样做会更有效率。

但是,这个方法的黑暗面是——这会让服务器端出现大量的TCP链接,想一想,Quora也是百万级用户的应用了,只需要10%的在线用户,你就需要一个可以处理10万并发量的架构。注意,如果一个用户在其浏览器里打开了多个Quora网页的话,那么,这个链接器会是非常致命的。

当然,好的消息是已经有一些技术专门为Long Polling设计,这些技术可以让你在那些等待的连接中只会消耗非常非常少的内存(因为那些等待连接并不需要所有的资源)。例如:Nginx 是一个单线程的事件驱动的小型服务器,每一个链接只花非常小的内存。每一个Nginx的进程只会在一个时候处理一个连接。这意味着其很容易扩展成一个可以处理成千上的并发量的服务架构。

参考How do you push messages back to a web-browser client through AJAX? Is there any way to do this without having the client constantly polling the server for updates?

MySQL

就像Adam D’Angelo 的老东家facebook一样,,Quora重度使用MySQL。对于,把数据库里的数据分区是最需要做的事。他们的行事原则是,尽可能的把数据放在一台机器上,使用hash主键把大规模的数据存放到多个数据库中。坚决不用表连接。Adam参考了FriendFeed的一篇文章How FriendFeed uses MySQL to store schema-less data并说你不应该在你的社区还没有100万用户的时候使用NoSQL 数据库。

并不只是Quora和FriendFeed使用MySQL,Google,Twitter,Facebook都在使用MySQL.

参考:How does one evaluate if a database is efficient enough to not crash as it’s put under increasing load?

Memcached

Memcached 用于 MySQL的前端缓存。

Git

Git 是他们的源码版本控制工具.

JavaScript Placement

如果你看一下Quora的网页源码,你会看到其JavaScript总是在页面的最后。 Charlie Cheever建议 这会让你的页面显得载入得很快,因为其先显示内容,然后在载入Javascript。

Charlie Cheever 遵从 “14 Rules for Faster-Loading Web Sites”

Steve Souders,  High Performance Web Sites 和 Even Faster Web Sites的作者,其列了一些 rules让你网页更快的原则。 Charlie Cheever 的 Quora 创始人提到这些过,这应该也是Quora的速度的原因。

“One resource we used as a guide is Steve Souders’ list of rules for high performance websites:http://stevesouders.com/hpws/rules.php
– Charlie Cheever, Quora

Steve Souders的14条规则是——
 

  • Make Fewer HTTP Requests
  • Use a Content Delivery Network
  • Add an Expires Header
  • Gzip Components
  • Put Stylesheets at the Top
  • Put Scripts at the Bottom
  • Avoid CSS Expressions
  • Make JavaScript and CSS External
  • Reduce DNS Lookups
  • Minify JavaScript
  • Avoid Redirects
  • Remove Duplicate Scripts
  • Configure ETags
  • Make AJAX Cacheable

(全文完)

转自:http://coolshell.cn/articles/4939.html