整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

用 Ruby发邮件

用 Ruby发邮件

设您有一个可以工作的 Ruby 应用程序,并且需要向其添加电子邮件传递功能。这可能与用户身份验证或任何其他类型的事务性电子邮件有关,这没有什么区别。本教程旨在帮助您实现使用 Ruby 发送电子邮件。

用 Ruby 发送电子邮件的选项

大多数情况下,你可以从三个选项中选择一个。

最简单的方法是使用 Net: : SMTP 类。它提供了通过 SMTP 发送电子邮件的功能。该选项的缺点是 Net: : SMTP 缺少撰写电子邮件的功能。你可以自己创建,但这需要时间。

第二种选择是使用专用的 Ruby gem,如 Mail、 Pony 或其他。这些解决方案使您能够以简单有效的方式处理电子邮件活动。Action Mailer 是一个完美的电子邮件解决方案,通过 Rails 的棱镜。而且,很有可能,这将是你的选择。

第三个选项是类 Socket。通常,这个类允许您设置流程之间或流程内部的通信。因此,电子邮件发送也可以用它来实现。然而,事实是 Socket 并没有为您提供广泛的功能,您也不太可能想要使用它。

现在,让我们尝试使用所描述的每个解决方案发送电子邮件。

如何通过 Net: : SMTP 在 Ruby 中发送电子邮件

根据我的经验,在一个普通的 web 应用程序中使用这个选项是不常见的。但是,如果您在某些物联网设备上使用 mruby (Ruby 语言的一种轻量级实现) ,那么通过 Net: : SMTP 发送电子邮件可能是合适的。此外,如果在无服务器计算中使用,例如 AWS Lambda,它也会这样做。首先查看这个脚本示例,然后我们将详细介绍它。

Ruby 露比

brrequire 'net/smtp'brmessage=<<END_OF_MESSAGEbrFrom: YourRubyApp <info@yourrubyapp.com>brTo: BestUserEver <your@bestuserever.com>brbrSubject: Any email subject you wantbrbrDate: Tue, 02 Jul 2019 15:00:34 +0800brbrLorem Ipsum

这是一个通过 SMTP 发送文本电子邮件的简单示例(可以在这里找到官方文档)。您可以看到四个标题: 发件人、收件人、主题和日期。请记住,您必须将它们与电子邮件正文中的空行分开。同样重要的是连接到 SMTP 服务器。

Net::SMTP.start('your.smtp.server', 25) do |smtp|

Start (‘ your.smtp.server’,25) do | smtp |

自然,这里将显示您的数据,而不是“ your.smtp.server”,并且25是默认端口号。如果需要,可以指定其他详细信息,如用户名、密码或身份验证方案(普通、登录和 cram _ md5)。它可能看起来如下:

`Net::SMTP.start('your.smtp.server', 25, ‘localhost’, ‘username’, ‘password’ :plain) do |smtp|`

在这里,您将使用纯文本格式的用户名和密码连接到 SMTP 服务器,客户机的主机名将被标识为 localhost。

之后,可以使用 send _ message 方法并将发送方和接收方的地址指定为参数。

Start (‘ Net: : SMTP.start (‘ your.SMTP.server’,25) do | SMTP |’)的块形式将自动关闭 SMTP 会话。

在 Ruby Cookbook 中,使用 Net: : SMTP 库发送电子邮件被称为极简主义,因为您必须手动构建电子邮件字符串。尽管如此,这并不像你想象的那样没有希望。让我们看看如何用 HTML 内容增强电子邮件,甚至添加附件。

在网上发送 HTML 电子邮件: : SMTP

查看这个引用消息部分的脚本示例。


Ruby

message=<<END_OF_MESSAGEbrFrom: YourRubyApp <info@yourrubyapp.com>brTo: BestUserEver <your@bestuserever.com>brMIME-Version: 1.0brContent-type: text/htmlbrbrSubject: Any email subject you wantbrbrDate: Tue, 02 Jul 2019 15:00:34 +0800brbrA bit of plain text.brbr<strong>The beginning of your HTML content.</strong>brbr<h1>And some headline, as well.</h1>brbrEND_OF_MESSAGE


除了消息体中的 HTML 标记之外,我们还有两个额外的头: MIME-Version 和 Content-type。MIME 指的是 MIME。它是 Internet 电子邮件协议的扩展,允许您在单个消息体中组合不同的内容类型。MIME-Version 的值通常为1.0。它指示消息是 MIME 格式的

至于 Content-type 头,一切都很清楚。在我们的示例中,有两种类型-HTML 和纯文本。另外,确保使用定义的边界分隔这些内容类型。

除了 MIME-Version 和 Content-type,您可以使用其他 MIME 头:

内容-传输-编码-表示二进制到文本的编码方案(7位、 Quoted-printable、 base64、8位或二进制)。


在网上发送带附件的电子邮件: : SMTP

- Content-Disposition-指定表示样式(内联或附件)

让我们添加一个附件,例如 PDF 文件。在这种情况下,我们需要将 Content-type 更新为 multipart/mix。另外,使用 pack (“ m”)函数用 base64编码对附加文件进行编码。

Ruby

require 'net/smtp'brfilename="/tmp/Attachment.pdf"brfile_content=File.read(filename)brencoded_content=[file_content].pack("m")   # base64brmarker="AUNIQUEMARKER"


之后,你需要定义你的电子邮件的三个部分。

第1部分-主要标题


part1=<<END_OF_MESSAGEbrFrom: YourRubyApp <info@yourrubyapp.com>brTo: BestUserEver <your@bestuserever.com>brSubject: Adding attachment to emailbrMIME-Version: 1.0brContent-Type: multipart/mixed; boundary=#{marker}br--#{marker}brEND_OF_MESSAGE


第2部分-消息行动


part2=<<END_OF_MESSAGEbrContent-Type: text/htmlbrContent-Transfer-Encoding:8bitbrA bit of plain text.br<strong>The beginning of your HTML content.</strong>br<h1>And some headline, as well.</h1>br--#{marker}brEND_OF_MESSAGE


第三部分-附件


part3=<<END_OF_MESSAGEbrContent-Type: multipart/mixed; name="#{filename}"brContent-Transfer-Encoding:base64brContent-Disposition: attachment; filename="#{filename}"br#{encoded_content}br--#{marker}--brEND_OF_MESSAGE

现在,我们可以把所有的部分放在一起,并最终确定剧本。这就是它看起来的样子:

Ruby

brrequire 'net/smtp'brfilename="/tmp/Attachment.pdf"brfile_content=File.read(filename)brencoded_content=[file_content].pack("m")   # base64brmarker="AUNIQUEMARKER"brpart1=<<END_OF_MESSAGEbrFrom: YourRubyApp <info@yourrubyapp.com>brTo: BestUserEver <your@bestuserever.com>brSubject: Adding attachment to emailbrMIME-Version: 1.0brContent-Type: multipart/mixed; boundary=#{marker}

我可以发送电子邮件给多个收件人在网络: : SMTP?


当然,你可以. send _ message 期望第二个和随后的参数包含收件人的电子邮件。例如:


Ruby

Net::SMTP.start('your.smtp.server', 25) do |smtp|br  smtp.send_message message,br  'info@yourrubyapp.com',br  'your@bestuserever1.com',br  ‘your@bestuserever2.com’,br  ‘your@bestuserever3.combrend


发送电子邮件的最佳 Ruby Gems

在 Ruby 生态系统中,您可以找到特定的电子邮件 gems,它们可以改善您的电子邮件发送体验。

Ruby Mail


该库旨在提供一个单点访问管理所有电子邮件相关活动,包括发送和接收电子邮件。
Pony

您可能听说过一个关于用一个命令发送电子邮件的童话故事。抓紧你们的帽子,因为它是真的,由小马宝石提供。

ActionMailer


这是最流行的宝石发送电子邮件在 Rails 上。如果你的应用程序写在上面,ActionMailer 肯定会出现。它允许您使用邮件类和视图发送电子邮件

使用邮件陷阱测试使用 Net: : SMTP 的电子邮件发送


设置非常简单。进入演示收件箱后,复制 SMTP“设置”选项卡上的 SMTP 凭据并将其插入到代码中。或者,您可以在 Integrations 部分获得一个简单消息的即用模板。只要选择一种编程语言或框架,你的应用程序是建立。

Ruby

require 'net/smtp'brmessage=<<END_OF_MESSAGEbrFrom: YourRubyApp <info@yourrubyapp.com>brTo: BestUserEver <your@bestuserever.com>brSubject: Any email subject you wantbrDate: Tue, 02 Jul 2019 15:00:34 +0800brLorem IpsumbrEND_OF_MESSAGEbrbrNet::SMTP.start('smtp.mailtrap.io', 587, '<username>', '<password>', :cram_md5) do |smtp|br  smtp.send_message message,


如果一切正常,您将在邮件陷阱演示收件箱中看到您的消息。此外,您可以尝试检查您的 HTML 内容和附件的电子邮件。


您刚刚阅读了关于如何使用 Ruby 测试和发送电子邮件的完整教程。希望您喜欢!

PI

来源:快舔包我很肥

框架

  • NancyFx:轻量、用于构建 HTTP 基础服务的非正式(low-ceremony)框架,基于.Net 及 Mono 平台。
  • ASP.NET WebAPI:快捷创建 HTTP 服务的框架,可以广泛用于多种不同的客户端,包括浏览器和移动设备。
  • ServiceStack:架构缜密、速度飞快、令人愉悦的 web 服务。
  • Nelibur:Nelibur 是一个使用纯 WCF 构建的基于消息的 web 服务框架。Nelibur 可以便捷地创建高性能、基于消息的 web 服务,使得你全面拥有 WCF 的强大能力。


WebAPI Contrib:帮助你提高 ASP.NET Web API 能力的开源项目集合。

应用框架(Application Frameworks)

  • ASP.NET Boilerplate:现代 ASP.NET MVC web 应用程序的入门,包含最佳实践和最流行的工具。
  • Orleans:Orleans 框架提供了直接构建分布式、大规模计算应用的方法,无需学习和使用复杂的并行或扩展模型。
  • CoreFX:corefx 仓库包含了 .NET 核心功能库的实现(被称为“CoreFX”)。包含了 System.Collections、System.IO、System.Xml 以及诸多其它组件。目前构建并运行于 Windows 平台。你可以关注这个仓库,了解在未来的几个月内即将增加的对 Linux 和 Mac 的支持。
  • CSLA .NET:业务层开发框架 http://www.cslanet.com。
  • Mono:Mono 是 ECMA CLI、C# 以及 .NET 的开源实现。
  • Mono-Addins:Mono.Addins 是一个通用框架,用于创建可扩展的应用程序,以及这些应用程序的扩展插件。
  • Spring.Net:Spring.NET 是一个开源的应用程序框架,可以便捷地创建企业级 .NET 项目。


应用模板(Application Templates)

  • MVC.Template:ASP.NET MVC 5 入门项目模板。
  • ProjectScaffold:F# 基金会推荐的 .NET 解决方案的原型——包括文件系统的搭建、用于管理依赖的 Paket 以及用于自动化构建、测试的 FAKE。默认情况下,构建流程也会对文档进行编译,并生成 NuGet 程序包。
  • Side-Waffle :包含大量有用的 Web 和桌面开发模板。Side-Waffle
  • Template10 :带有设计模式的 Windows 10 模板。Template10


人工智能(Artificial Intelligence)

  • AIMLBot(Program#):使用 C# 编写的一个小型、快速、兼容标准、易于定制的聊天机器人,基于 AIML (人工智能标记语言 Artificial Intelligence Markup Language)。
  • SIML:智能综合智能标记语言(Synthetic Intelligence Markup Language),下一代聊天机器人及数字助手语言。


程序集处理(Assembly Manipulation)

  • dnSpy:dnSpy 是一个 .NET 程序集编辑器、反编译器和调试器,来自 ILSpy 分支。
  • Fody:织入(weaving).net 程序集的可扩展工具。
  • Mono.Cecil:Cecil 类库用于生成和检查 ECMA CIL 程序和库。


资源(Assets)

  • Cassette:管理 .NET web 应用程序资源(脚本、css 和 模板)Cassette
  • NodeAssets:.net 资源管理器,通过 SignalR 实时更新 css,也可以使用 NodeJS 编译器。
  • Bundler:编译和最小化 Less、Sass、Stylus、Css、JS、CoffeeScript、LiveScript 文件。MVC集成了 MVC 和 ServiceStack。
  • ClientDependency:压缩CSS与JS,提供WebForm与MVC版本。
  • SquishIt:让你轻松合并一些 css 和 javascript。


认证和授权(Authentication and Authorization)

  • ASP.NET Identity:用于 ASP.NET 应用程序的新身份系统。
  • DotNetOpenAuth:OpenID、OAuth 和 InfoCard 协议的一个 C# 实现。


  • Logibit Hawk:一个 F# Hawk 认证库。


  • IdentityModel:.NET 4.5 和 MVC4、Web API 身份和访问控制的辅助库。
  • IdentityServer:可扩展的 OAuth2 和 OpenID 连接提供程序框架。
  • OAuth:超轻量级 OAuth 1.0a 签名生成库,C# 编写。


自动构建(Build Automation)

  • Psake:基于 .NET 的自动化构建工具,使用 PowerShell 编写。
  • FAKE:F# Make,一个跨平台自动构建系统。
  • Invoke-Build:PowerShell 自动构建和测试工具,灵感来自 Psake。
  • MSBuild:微软构建引擎(MSBuild)是 .NET 和 Visual Studio 的构建平台。
  • Cake:Cake(C# Make)使用 C# DSL 的跨平台自动构建系统。


缓存(Caching)

  • CacheCow:ASP.NET Web API HTTP 客户端和服务器端缓存实现。
  • Akavache:一个异步、持久化的键值存储。
  • CacheManager:是用C#为.NET写的缓存管理抽象层,支持多种缓存工具,可以实现层次化的缓存。


CLI

  • Command Line Parser:Command Line Parser 类库为 CLR 应用程序提供了一套简洁的 API,用于处理命令行参数及相关任务。
  • Fluent Command Line Parser:一个简单、强类型的 .NET C# 命令行解析库,交互方式流畅易用。
  • Power Args:PowerArgs 将命令行参数转换为 .NET 对象,便于程序使用。它还提供了大量可选的扩展,例如参数校验、自动生成使用帮助、tab 补全等等。
  • UnionArgParser:针对 F# 应用程序的声明式 CLI 参数和 XML 配置解析器。


CLR

  • CoreCLR:coreclr repo 包含了完整的 .NET 核心运行时实现(称为“CoreCLR”)。它包括 RyuJIT、.NET GC、非托管代码交互(native interop)等诸多组件。它目前构建和运行于 Windows 平台。你可以关注这个仓库,了解未来的几个月内即将增加的对 Linux 和 Mac 的支持。


CMS

  • Composite C1:一个 web 内容管理系统,着重在用户体验及适应性。
  • mojoPortal:MojoPortal 是一个可扩展、跨数据库、移动友好的 web 内容管理系统(CMS)和 web 应用程序框架,使用 C# ASP.NET 编写。
  • N2CMS:开源、轻量、代码优先的 CMS,可以无缝地集成到任何 MVC 项目中。
  • Orchard:免费、开源、专注社区的项目,目标是在 ASP.NET 平台上提供应用程序和可重用组件。
  • Piranha CMS:Piranha 是一个有趣、快速、轻量级的 .NET 框架,用于开发基于 cms 附带其它功能的 web 应用程序。它基于 ASP.NET MVC 和 Web 页面创建,完全兼容 Visual Studio 和 WebMatrix。
  • Umbraco:Umbraco 是一个免费开源的内容管理系统,基于 ASP.NET 平台构建。


代码分析和度量(Code Analysis and Metrics)

  • CodeMaid:Visual studio 扩展,用于清理、挖掘和简化 C#、C++、F#、VB、PHP、JSON、XAML、XML、ASP、HTML、CSS、LESS、SCSS、JavaScript 和 TypeScript 代码。
  • StyleCop:StyleCop 使用一组风格和一致性规则,对 C# 源代码进行分析和强制性检查。
  • Gendarme:可扩展的、基于规则的工具,用于在 .NET 应用程序和类库中查找问题。
  • Metrics-Net:捕获 CLR 和应用程序级别的度量值。所以你知道它的功能。


编译器(Compiler)

  • Bridge.NET:将 C# 编译成 JavaScript 的开源编译器 http://bridge.net/。
  • ClojureCLR:从 Clojure 到 CLR 的转换,是 Clojure 项目的一部分。
  • F#:F# 编译器、核心库和工具——更安全、更快、代码更好的函数式编程语言。
  • FunScript:F# 到 JavaScript 的编译器,可以通过 TypeScript 类型提供程序使用 JQuery 等 JavaScript 库。
  • JSIL:CIL 到 Javascript 的编译器 http://jsil.org/。
  • Mono-basic:Visual Basic 编译器和运行时。
  • Nemerle:Nemerle 是一个 .NET 平台高级静态类型编程语言。它提供函数式、面向对象式和命令式编程语言的特性。它拥有一个简单的类似 C# 的语法和强大的元编程(meta-programming)系统。
  • Netjs:.NET 到 TypeScript 和 JavaScript 编译器。兼容可移植类库。你甚至可以使用 EXE 文件。
  • Roslyn:.NET 编译平台(“Roslyn”)提供开源的 C# 和 Visual Basic 编译器,包含丰富的代码分析 API。它可以使用和 Visual Studio 一样的 API 来构建代码分析工具。
  • VisualFSharp:Visual F# 编译器和工具。


压缩(Compression)

  • SharpCompress:SharpCompress 是一个用于 .NET、Mono、Silverlight、WP7 的压缩类库,可以解压rar、7zip、zip、tar、bzip2 和 gzip,提供单向读取和随机文件访问 API。支持对 zip/tar/bzip2/gzip 进行写入的实现。
  • DotNetZip.Semverd:一个开源项目,提供对 ZIP 文件处理的 .NET 类库和相关工具。 (分支自 已经不再维护的DotNetZip)DotNetZip.Semverd
  • SharpZipLib:一个 Zip、GZip、Tar 和 BZip2 的类库,完全由 C# 编写,面向 .NET 平台。


持续集成(Continuous Integration)

  • TeamCity:可以直接使用的,可扩展、面向开发人员友好的构建服务器——开箱即用。
  • CruiseControl.NET:一个自动化持续集成服务器,使用 .NET Framework 实现。
  • MyGet:为NuGet、NPM、Bower 和 VSIX 提供持续集成、部署、宿主程序包仓库的服务。
  • AppVeyor:.NET 持续构建和部署服务。


加密(Cryptography)

  • BouncyCastle:和 .Net 的 System.Security.Cryptography 一起,在 CLR 上提供加密算法的实现。
  • HashLib:HashLib 包含了几乎所有你见过的哈希算法,它几乎支持所有东西并且非常容易使用。
  • libsodium-net:libsodium for .NET——一个安全加密库。
  • StreamCryptor:使用 libsodium 和 protobuf 对流进行加密和解密。


数据库(Database)

  • BrightstarDb:BrightstarDB 是一个原生的 .NET RDF 三元组数据库(triple store)。
  • Event Store:开源的功能性数据库,支持使用 JavaScript 进行复杂事件处理。 https://geteventstore.com
  • LiteDB:一个 .NET 的 NoSQL 单文件文档数据库。
  • RavenDB:支持 linq 的 .NET 文档数据库。


数据库驱动(Database Drivers)

  • MySQL Connector:完全托管的 MySQL ADO.NET 数据库提供程序、连接器。
  • Npgsql:Postgresql 的 .Net 数据提供程序。
  • MongoDB:MongoDB 官方 C# 驱动。
  • ServiceStack Redis:.NET 领先的 C# Redis 客户端。
  • StackExchange Redis:来自 StackExchange 的通用 redis 客户端。
  • Cassandra:DataStax 开发的 Apache Cassandra .NET 驱动程序。
  • Couchbase:couchbase 官方 .NET 客户端库,基于 Enyim memcached 客户端。
  • Firebird.NET:由C# 编写的 .NET 数据提供程序,提供对 Firebird API 的高性能原生实现。


反编译(Decompilation)

  • ILSpy:ILSpy 是一个开源的 .NET 程序集查看器和反编译器。
  • JustDecompile Engine:JustDecompile 反编译引擎。
  • de4dot:是一款强大的.NET程序集反混淆和脱壳工具(开源GPLv3)。


部署(Deployment)

  • Unfold:基于 Powershell 的 .net web 应用程序部署解决方案。


DirectX

  • SlimDX:为 .NET 应用程序提供的 DirectX 封装。
  • SharpDX:SharpDX 是一个开源项目,为 .Net 及所有 Windows 平台提供完整的 DirectX API,可以开发高性能的游戏、2D/3D图形渲染以及实时音频应用程序。


分布式计算(Distributed Computing)

  • Project Orleans:Orleans 框架提供了直接构建分布式、大规模计算应用的方法,无需学习和使用复杂的并行或扩展模型。由微软研究院开发。
  • Akka.net:Akka.NET 是流行的 Java/Scala 框架 Akka 的 .NET 版本。它由社区提供,与 Typesafe(原始的 Java、Scala 版本的开发商)无关。


文档(Documentation)

  • Sandcastle:Sandcastle 帮助文件生成器和 NDoc 类似。
  • SharpDox:一个 c# 文档工具。
  • Swashbuckle:向 WebApi 项目无缝地添加 swagger 文档(译者注:swagger 是一套用于生成、描述、展现 RESTful 风格 web 服务文档的框架和规范)。
  • NSwag:通过Swagger规范生成.NET、TypeScript的Web API客户端。
  • F# Formatting:F# 和 C# 项目的文档工具,文档生成自 F# 脚本文件、Markdown 文档、内嵌 XML 或 Markdown评论。


电子商务和支付(E-Commerce and Payments)

  • Paypal Merchant SDK:Paypal Merchant官方.NET SDK。
  • NopCommerce:nopCommerce。开源的电子商务购物车(ASP.NET MVC)。


  • ServiceStack.Stripe:针对 stripe.com REST API 的强类型 .NET 客户端。


  • SmartStoreNET:免费 ASP.NET MVC 电子商务购物车解决方案。


  • Stripe.Net:Stripe.net 是针对 http://stripe.com 完整服务的 .net api。


  • BeYourMarket:BeYourMarket 是一个点对点的市场框架。


  • Virto Commerce:Virto Commerce 是第二个版本,也是唯一的开源许可下的企业级别电子商务产品。Virto Commerce 基于 .NET 4.5,使用了 MVC、IoC、EF、Azure、Angular JS 等其他先进技术。它可以在微软的云平台(Azure)、亚马逊云服务(AWS)和企业内部部署。


环境管理(Environment Management)

  • DNVM:.NET SDK 管理器,一组命令行工具,用于更新和配置需要使用的运行时环境(DNX)。


ETL

  • Reactive ETL:Reactive ETL 使用 .NET 反应性扩展框架(reactive extensions) 重写了 Rhino ETL。


游戏(Game)

  • MonoGame:一个用来创建跨平台游戏的强大框架。
  • CocosSharp:CocosSharp 是 Cocos2D 和 Cocos3D API 的 C# 实现版本,可以在所有支持 MonoGame 的平台上运行。
  • Duality:Duality 是一个 2D 游戏开发框架。专注于功能的模块化,自带一个可视化编辑器。
  • Paradox:Paradox 游戏引擎。


地理信息系统(Gis)

  • NetTopologySuite:一个 在 .NET 平台上实现快速、可靠的 GIS 系统解决方案。
  • SharpMap:一个易于使用的地图库,可以用于 web 和桌面应用程序。


Git工具(Git Tools)

  • Bonobo Git Server:Bonobo Git Server for Windows 是一个 web 应用程序,可以安装在你自己的 IIS 上,用于管理和连接你的 git 仓库。
  • GitExtensions:GitExtensions 包含资源管理器扩展、Visual Studio 2008/2010/2012/2013 插件和一个独立的 Git 仓库工具。
  • GitLink:让用户可以单步调试托管在 GitHub 或 BitBucket 上的代码。
  • GitVersion:根据你的 Git 仓库的状态生成一个语义化版本号(Semantic Version Number)。
  • LibGit2Sharp:LibGit2Sharp 带来了 libgit2 所有的功能和速度,是一个本地 Git 实现,可以运行在 .Net 和 Mono 平台。
  • NGit:NGit 是 JGit 移植到 C# 的版本。
  • posh-git:Git 的 PowerShell 环境。


图形(Graphics)

  • Oxyplot:OxyPlot 是一个 .NET 跨平台绘图库。
  • OpenTK:Open Toolkit 是一个封装了 OpenGL、OpenCL 和 OpenAL 的 高级底层 C# 开发库。
  • NGraphics:NGraphics 是一个 .NET 跨平台矢量图形渲染库。


GUI

  • MahApps.Metro:用于创建 Metro 风格 WPF 应用的工具箱。
  • Callisto:用于 Windows 8 XAML 应用的控件工具箱。包含若干 UI 控件,让你更容易地创建符合 Windows UI 风格规范的Windows 商店应用。
  • ObjectListView:ObjectListView 使用 C# 封装了 .NET 的 ListView 控件。它使得 ListView 更加易用,并且加入了一些新特性。
  • DockPanelSuite:灵感来自 Visual Studio 的停靠窗口(docking)类库,用于 .NET WinForm 应用。
  • AvalonEdit:在 SharpDevelop 中使用,基于 WPF 的文本编辑器组件。
  • XWT:跨平台 UI 工具箱,用于创建 .NET 和 Mono 桌面应用程序。
  • Gtk#:Gtk# 是 Gtk+ GUI 工具箱的 Mono/.NET 版本,绝大多数 Mono 中的 GUI 应用都基于它构建。
  • MaterialDesignInXamlToolkit:用于创建 Material Design 风格 WPF 应用的工具箱。
  • Eto.Forms:跨平台的 GUI 框架,用于 .NET 和 Mono 下的桌面和移动应用程序。
  • Dragablz:可拖拽、可分离(tearable,译者注:即拖拽标签页成为独立窗口)的 WPF 标签页控件(类似 Chrome)。支持布局和主题,包含兼容 MahApps 和 Material Design 的主题。
  • Fluent.Ribbon:Fluent Ribbon Control Suite 是一个在 WPF 中实现 Office 和 Windows 8 风格的 Ribbon 库。


HTML 和 CSS(HTML and CSS)

  • AngleSharp:支持构建完整的 HTML5 DOM 和 CSS3 模型。
  • CsQuery:jQuery 风格的HTML5 解析器,可与 DOM 交互。
  • dotless:ruby Less CSS 库的 .NET 移植版本。
  • ExCSS:C# 的 CSS3 解析器开发库。
  • FluentBootstrap:让ASP.NET MVC 和 WebPages 更容易使用 Boostrap CSS 框架。
  • HtmlAgilityPack:一个灵活的 HTML 解析器,可以对 DOM 进行读写,支持 XPATH 和 XSLT。
  • Jumony:类似HtmlAgilityPack框架,性能有改善。


HTTP

  • Http.fs:[F#] 中的一个函数式 HTTP 客户端。
  • RestSharp:.NET 下简单的 REST 和 HTTP API 协议客户端。
  • EasyHttp:C# Http开发库。
  • Refit:Xamarin 和 .NET 下自动生成强类型的 REST 库。
  • RestEase:类型安全且易于使用的 REST API 客户端库,简单可定制。大部分灵感来自 Refit。


IDE

  • SharpDevelop:用于 .NET 编程语言的免费 IDE。
  • MonoDevelop:MonoDevelop 是一个跨平台的 IDE,主要面向 Mono/.NET 开发者。
  • Visual Studio Express:用于 .NET 开发的免费、轻量版本的 Visual Studio。
  • Visual Studio Community:功能完整的免费 IDE。
  • Waf DotNetPad:简单快速的代码编辑器,让开发 C# 或 Visual Basic 充满乐趣。
  • Visual Studio Code:非常棒的编辑器,来自微软,基于 GitHub Atom。


  • Rider:跨平台.Net IDE。


图像处理(Image Processing)

  • ImageResizer:在图片 URL 后面增加命令,在几毫秒内获取修改后的版本,支持实时的对图片进行缩放、编辑。
  • ImageProcessor:开源 .NET 库,用于实时处理图片。
  • DynamicImage:高性能开源图片处理库,用于 ASP.NET。
  • MetadataExtractor:从图片中提取 Exif、IPTC、XMP、ICC 等其它元数据信息。
  • Emgu CV:OpenCV 的 .NET 跨平台封装。


安装工具(Install Tools)

  • Wix Toolset:强大的工具集,用于创建你自己的 Windows 安装程序。
  • Squirrel:Squirrel 即是一套工具也是一个类库,可以无安全管理 Windows 桌面程序的安装和更新。


国际化(Internationalization)

  • i18n:ASP.NET MVC 智能国际化工具。


互操作(Interoperability)

  • CefSharp:Chromium Embedded Framework 的 .NET 支持(WPF 和 WinForm)。
  • CppSharp:在 C# 中平滑使用 C++ API 的工具。
  • Sharpen:Sharpen 是 db4o 编写的 Eclipse 插件,可以让你把 Java 项目转换为 C#。
  • CXXI:C++ 互操作框架。


IoC

  • Castle Windsor:Castle Windsor 是一个用于 .NET 和 Silverlight 的成熟的 控制反转(IoC) 容器。
  • Unity:轻量级、可扩展的依赖注入容器,支持构造函数、属性和方法调用注入。
  • Autofac:令人着迷的 .NET IoC 容器。
  • Ninject:.net 依赖注入的忍者。
  • StructureMap:.Net 最早的 IoC/ID 容器。
  • Spring.Net:Spring.NET 是一个开源应用程序框架,可以便捷地创建企业级 .NET 应用。
  • LightInject:一个超轻量级 IoC 容器。
  • TinyIoC:单文件、简单、跨平台的 IoC 容器。


日志(Logging)

  • Essential Diagnostics:为内置System.Diagnostics 命名空间扩展功能,提供更灵活的日志功能。
  • NLog:先进的 .NET 和 Silverlight 日志工具。
  • ELMAH:ELMAH 官方网站。
  • Elmah MVC:MVC 版 Elmah。
  • Logary:Logary 是一个 mono 和 .Net 平台下高性能、多目标的日志、度量、追踪和健康检查库。支持多目标,为微服务构建。
  • Log4Net:Apache log4net 工具库能够帮助程序员向多种不同的目标输出日志语句。
  • Serilog:一个 NoSQL 时代下简单直接的日志库。将多个优秀的传统结构化分析日志功能合并到一个易于使用的程序集中。
  • StackExchange.Exceptional:Stack Exchange 网络使用的错误处理程序。
  • Semantic Logging Application Block (SLAB):为内置
  • System.Diagnostics.Tracing 命名空间(EventSource类)扩展功能,支持将日志记录到多个容器中,包括 Azure 表存储、数据库、文件(JSON、XML、文本文件)。通过 ETW 支持进程内和进程外的日志记录,支持 Rx 进行实时的事件过滤和聚合。
  • Exceptionless:一个免费开源分布式系统的日志收集框架,它可以应用在基于 ASP.NET,ASP.NET Core,Web Api,Web Forms,WPF,Console,MVC 等技术栈的应用程序中,并且提供了Rest接口可以应用在 Javascript,Node.js 中。


机器学习和数据科学(Machine Learning and Data Science)

  • Accord.NET:机器学习框架,包含了音频和图像处理的库(计算机视觉、计算机听觉、信号处理和统计)。
  • Accord.NET Extensions:高级图像处理和计算机视觉算法扩展。
  • AForge.NET:为计算机视觉和人工智能领域的开发者和研究人员提供的框架(包括图像处理、神经网络、遗传算法、机器学习、机器人科学)。
  • Deedle:处理探索性数据的数据帧和时序库,支持 C# 和 F#。
  • FsLab:数据科学和机器学习库的集合,支持 F# 和 .NET。
  • numl:包含最流行的监督学习和无监督学习算法,尽量减少创建预测模型时的冲突。
  • R Provider:将 R 语言包和函数封装为类型安全的类型提供程序供 F# 调用。
  • F# Data:F# 类型提供程序,访问 XML、JSON、CSV 和 HTML 文件(基于样例文档),以及 WorldBank 数据。


Markdown 处理(Markdown Processors)

  • MarkdownSharp:C# 实现的开源 Markdown 处理器,在 Stack Overflow 中使用。
  • F# Formatting:用于生成 F# 和 C# 项目文档的工具。该工具库的核心组件中包含了可扩展的 Markdown 解析器。
  • CommonMark.NET:CommonMark 规范的 C# 实现,用于将 Markdown 文档转换为 HTML。为最佳性能和可移植性进行了优化。


邮件(Mail)

  • FluentEmail:System.Net.Mail 的一个流式(Fluent)封装,支持 razor 模板引擎。
  • MailKit:完整的跨平台的邮件协议栈,包括 IMAP、POP3、SMTP,支持验证等特性。基于 MimeKit 构建。
  • MimeKit:跨平台 .NET MIME 创建和解析库,支持 S/MIME、PGP、TNEF 和 Unix mbox spools。
  • PreMailer.Net:一个 C# 开发库,将你的样式表嵌入到内置的 style 属性中,最大限度支持邮件客户端。


数学(Mathematics)

  • MathNet:Math.NET 是一个开源项目,旨在创建和维护涵盖基础数学在内的工具集,面向高级和日常需要使用此类功能的 .Net 开发人员。


多媒体(Media)

  • TagLib#:TagLib#(即 taglib-sharp)是一个读写媒体文件元数据的库,支持视频、音频和照片格式。


度量(Metrics)

  • C# StatsD Client:Etsy StatsD 服务器的 C# 客户端。
  • App Metrics:开源跨平台 .NET 报表度量开发库。


微框架(Micro Framework)

  • .NET Micro Framework Interpreter:Microsoft? .NET Micro Framework(NETMF)是一个在 Visual Studio 中提供为小型设备上编写嵌入式应用的框架。


杂项(Misc)

  • .NET Fiddle:在浏览器中编写、编译并运行 C# 代码。相当于 C# 版本的 JSFiddle。
  • AzureCrawler:从 Angular、Ember、Durandal 或任何 JavaScript 应用中获取 HTML 快照。
  • BitSharp:C# 比特币节点。
  • CSScript:CS-Script 是一个基于 CLR 的脚本系统,使用 C# 作为编程语言。CS-Script 目前针对微软的 CLR 实现(.NET 2.0/3.0/3.5/4.0/4.5)并完整支持 Mono。附带很多附加特性,比如脚本宿主。


  • CsvHelper:帮助读写 CSV 文件的开发库。


  • FluentValidation:一个小型的 .NET 校验库,使用流式接口和 lambda 表达式构建校验规则。
  • Humanizer:Humanizer 能够在 .NET 平台上满足所有针对字符串、枚举、日期、时间、时间范围、数字等类型数据的操作和显示要求。
  • LINQPad:一个 C#/VB/F# 的便签本,能够立即执行任何表达式、语句块或程序,带有富文本显示等有用的特性。同样可以让你使用 LINQ 进行交互性数据库查询。 [$](译者注:也有免费许可,但是功能受限)。
  • Polly:快捷便利的异常处理策略,例如 重试、始终重试、等待并重试或断路(Circuit Break)等行为。 (.NET 3.5、4.0、4.5、PCL、Xamarin)
  • Rant:Rant 程序文本生成 DSL(领域特定语言)。


  • ScriptCS:使用文本编辑器、nuget 和强大的 Roslyn 来编写 C# 应用!
  • EntityFramework-Plus:Entity Framework 扩展,提供工具类、Bulk 操作、批处理/批量更新、查询缓存/过滤器/Future、审计等功能。


MVVM

  • Caliburn.Micro:小型但功能强大的框架,可以用来给所有 XAML 平台创建应用。它对 MV* 模式的强大支持可以让你快速构建你的解决方案,与此同时不必牺牲代码质量和可测试能力。
  • MVVM Light Toolkit:该工具箱主要是用来加速创建和开发 MVVM 应用,适用于 WPF、Silverlight、Windows Store(RT)和 Windows Phone 平台。
  • Catel:Catel 是一个应用开发平台,主要着眼在 MVVM(WPF、Silverlight、Windows Phone 及 WinRT)以及 MVC(ASP.NET MVC)。Catel 的核心部分包含 IoC 容器、模型、校验、备忘录模式(memento)、消息中介(message mediator)、参数检查等。
  • UpdateControls:Update Controls 不需要你实现 INotifyPropertyChanged 接口或声明一个 DependencyProperty。可以将控件直接关联到 CLR 属性,这使得它完美贴合 MVVM 模式。
  • ReactiveUI:一个 .NET 下的 MVVM 框架,集成了反应性扩展框架(Rx),允许开发者使用 WPF、Windows Store Apps、WP8 或 Xamarin 创建优雅的、可测试的应用。
  • Okra App Framework:一个以 app 为中心的 Windows 8.1 MVVM 框架,融合依赖注入,包含一套完整的 Visual Studio MVVM 模板。
  • WPF Application Framework (WAF):一个轻量级的框架,能够帮助你创建结构优雅的 WPF 应用。支持你使用分层架构和 MVVM 模式。
  • MVVMCross:跨平台mvvm 移动开发框架,针对 WP7 和 WP8 的 WPF/Silverlight、Android 的 Mono、iOS 的 MonoTouch 以及 WPA8.1/Windows 8.1 商店应用的 Windows Universal 项目。它使用可移植类库(PCL)来支持可维护的跨平台 C# 原生应用。
  • Stylet:最小化 MVVM 框架(参考 Caliburn Micro),包含了良好的文档、高覆盖率的测试以及自带的 IoC 容器。
  • Gemini:类似 Visual Studio Shell 的 IDE 框架。基于 WPF、AvalonDock 和 Caliburn Micro 构建。


Office

  • ClosedXML:ClosedXML 能够让开发人员更便捷地创建 Excel 2007、2010 文件。
  • NPOI:该项目是 .NET 版本的 POI 项目,原始的 Java 版本位于http://poi.apache.org/ 。
  • EPPlus:EPPlus 是一个 .net 类库,用于读写 Open Office Xml 格式的 Excel 2007、2010 文件(xlsx)。
  • Open XML SDK:Open XML SDK 是一个开源库,用于处理 Open XML 文档(包括 DOCX、XLSX 和 PPTX)。


ORM

  • Entity Framework:对象关系映射器(ORM)框架,让 .NET 开发人员使用领域特定的对象来处理关系型数据。
  • BL Toolkit:.NET 平台的业务逻辑工具箱。
  • Dapper:一个超小型、快捷轻便的 ORM 框架。
  • Dapper Extensions:小型类库,对 Dapper 的功能进行补充,为你的简单传统 CLR 对象提供基础的 CRUD(Get、Insert、Update、Delete) 操作。
  • NHibernate:NHibernate 对象关系映射器(移植自 Java 平台的 Hibernate)。
  • Fluent NHibernate:便捷、无需使用 XML、编译安全、自动化、基于约定命名的 NHibernate 映射库。
  • FluentMigrator:.net 下的便捷的迁移框架。
  • ServiceStack.OrmLite:轻量、简单、快速、基于命名约定的 POCO ORM。


  • Massive:小型、令人愉悦的数据访问工具,始终关爱你直到永远。


  • LINQ to DB:最快的 LINQ 数据库访问库,简单、轻量、快速、类型安全,在你的对象(POCO)和数据库之间搭建桥梁。


包管理(Package Management)

  • NuGet:.NET 包管理器。
  • MyGet:为 NuGet、NPM、Bower 和 VSIX 提供程序包仓库宿主,同样提供 CI 服务。
  • Paket:.NET 的一个包依赖管理器,支持 NuGet 包和 GitHub 仓库。


PDF

  • ITextSharp:iText 是一个PDF库,用于创建、修改、检查和维护 Portable Document Format(PDF)格式的文档 [$] 开源软件免费


Profiler

  • MiniProfiler:一个简单但有效的小型 profiler,用于 ASP.NET 网站。
  • Glimpse:开源 web 诊断平台。


推送通知(Push Notifications)

  • PushSharp:服务器端的推送通知类库,支持 iOS、OSX、Android、Chrome、Windows Phone、Windows 8、Backberry 和 Amazon 设备。


队列(Queue)

  • NServiceBus:.NET 平台下最流行的服务总线。
  • RabbitMQ.NET:AMQP 客户端的 C# 实现,通过 WCF 绑定到已有的 AMQP 服务。
  • NetMQ:NetMQ 是 ZeroMQ 纯 C# 移植版本。
  • MassTransit:MassTransit 是一个精简服务总线(lean service bus)的实现,使用 .NET Framework 来构建松耦合应用程序。
  • Rebus:Rebus 是一个 .NET 平台的精简服务总线和 NServiceBus、MassTransit类似,只不过更加精简。
  • EasyNetQ:易于使用的 RabbitMQ .NET API。
  • Warewolf ESB:易于使用的服务总线和微服务平台,可以在一个可视化 IDE 中便捷的创建应用和服务。
  • CAP:用于处理分布式事务的 .Net 标准开发库。支持 EventBus,轻量级、高效且易于使用。


响应式编程(Reactive Programming)

  • Rx.NET:Reactive Extensions (Rx)库使用观察者序列(observable sequences)和 LINQ 风格的查询操作,来进行异步和基于事件的程序开发。
  • Dynamic Data:用于集合的响应式编程框架。


计划调度(Scheduling)

  • QuartzNet:Quartz 是 .NET 平台的企业级调度器。
  • Hangfire:在 ASP.NET 应用中,超简单地实现自主引导(fire-and-forget)、延迟和周期重复任务。高级版需要收费。
  • Hangfire.Redis.StackExchange:Hangfire的redis扩展库,基于StackExchange.Redis的开源实现。
  • Azure WebJobs:Azure WebJobs 是Azure中App Services一个附属服务,为Azure中运行的Web App提供后台运行环境(支持多种语言编写Job),有.NET的SDK开源,并且可以直接添加扩展也开源。


SDK 和 API 客户端(SDK and API Clients)

  • AWS SDK:AWS SDK for .NET 让 .NET 开发者可以便捷地操作 Amazon Web Services。
  • Azure PowerShell:一组 PowerShell 命令行,让开发者和管理员开发、部署和管理 Microsoft Azure 应用。
  • Octokit.NET:.NET 平台下的 GitHub API 客户端库。
  • DropNet:Dropbox API 客户端开发库。


搜索(Search)

  • Elasticsearch .NET:Elasticsearch.Net & NEST。
  • PlainElastic.Net:ElasticSearch 的一个简单的 .Net 客户端。
  • SolrNet:.Net 平台下的 Solr 客户端。
  • Lucene.net:Lucene.Net 是 Lucene 搜索引擎库的移植,使用 C# 编写,面向 .NET 环境的用户。


序列化(Serialization)

  • Protobuf.NET:Protocol buffers 是 Google 使用的二进制序列化格式,在 Google 数据通讯中大量使用。
  • Json.NET:.NET 平台下流行的、高性能 JSON 框架。
  • ServiceStack.Text:在 servicestack.net 中使用的 JSON、JSV、CSV 文本序列化器。
  • Msgpack-Cli:MessagePack 的 CLI 实现。
  • Jil:.NET 平台下快速的 JSON 序列化器,基于 Sigil (在 StackOverflow 中使用)。
  • ProtoBuf:根据 .proto 规范,为 protocol buffer 序列化内容生成 C# 代码。
  • F# Data:F# 类型提供程序,访问 XML、JSON、CSV 和 HTML 文件(基于样例文档),以及访问 WorldBank 数据。
  • Bond:跨平台框架,用于处理系统化(schematized)数据。支持跨平台的序列化、反序列化,以及强大的通用机制来高效处理数据。


状态机(State machines)

  • Stateless:直接使用 .NET 代码创建一个状态机和轻量的基于状态机的工作流。
  • Automatonymous:.Net 平台的状态机库,允许你编写流式API风格的状态机。

静态网站生成(Static Site Generators)

  • Pretzel:.NET 平台下的网站生成工具(包含后续的一些功能)。
  • Sandra.Snow:.NET 平台的静态网站生成工具,借鉴 Jekyll。
  • Wyam:简单易用、高度模块化、拥有强大配置能力的静态网站生成工具。


风格指南(Style Guide)

  • C# Style Guide:StackOverflow 上的C#风格指南 Q & A。
  • C# Coding Conventions:MSDN 官方的 C# 代码约定。


模板引擎(Template Engine)

  • RazorEngine:基于微软 Razor 解析器引擎的开源模板引擎。
  • Nustache:无逻辑模板的开源库。
  • DotLiquid:Ruby Liquid 模板语言的 C# 移植版本。


测试(Testing)

  • AutoFixture:AutoFixture 是一个用于 .NET 的开源框架,用于简化单元测试中的设置(Arrange)阶段。
  • FakeItEasy:.NET 平台的一个简单的 mocking 库。
  • Fluent Assertions:一组 .NET 扩展方法,可以让你更自然地指定 TDD 或 BDD 风格测试的期望值。
  • Fuchu:F# 的单元测试库,通过 tests-as-values 机制让你更容易创建领域特定语言(DSL)。
  • Machine.Specifications:Machine.Specifications (MSpec)是一个上下文、规范框架,忽略了语言本身的干扰,简化了测试。
  • Moq:.NET 平台下最流行和友好的 mocking 框架。
  • NBuilder:快速创建测试对象。
  • NSubstitute:一个友好的 .NET mocking 框架。
  • NUnit
  • Rhino Mocks:.NET 平台的动态 Mocking 框架。
  • Shouldly:Shouldly 是一个断言(assertion)框架,主要功能是在断言失败时,给出简单明了并且友好的错误信息。
  • SpecFlow:将业务需求绑定到 .Net 代码。
  • xUnit:xUnit.net 是一个 .NET 平台下免费、开源、专注社区的单元测试框架。
  • BenchmarkDotNet:功能强大的基础测试 .NET 开发库。


交易(Trading)

  • Lean:Lean 引擎是一个开源的,完全由 C# 托管代码编写的交易算法引擎,用于桌面和云端。
  • StockSharp:交易和算法交易(algorithmic trading)的开源平台(用于股票市场、外汇市场、比特币和期权交易)。


Visual Studio 插件(Visual Studio Plugins)

  • Web Essentials:Web Essentials 为 Visual Stduio 扩展了大量的特性,提供了 web 开发人员盼望多年的功能。
  • VsVIM:Visual Studio 中的 VIM。
  • Nuget Package Manager:NuGet 是微软开发平台(包括 .NET)的包管理器。
  • SideWaffle:Visual Studio 2012、2013 中的一组项目模板集合,让 web 开发人员更加轻松。


  • Resharper:Visual Studio 开发人员生产力工具 。


  • Refactoring Essentials:开源 C# 和 VB.NET 重构扩展,包括代码最佳实践分析器。


  • CodeContracts:.NET CodeContracts 工具源代码。


  • Git Diff Margin:在 Visual Studio 滚动条区域实时显示当前文件在 Git 上的差异。


  • Productivity Power Tools:一组 Visual Studio 专业版(及更高版本)的扩展,用于提高开发人员的生产力。


Web 框架(Web Frameworks)

  • ASP.NET MVC:ASP.NET 是一个免费的 web 框架,用于创建优秀的 web 站点和应用程序。
  • FubuMVC:.NET 平台下前端控制器(front-controller)风格的 MVC 框架。


  • NancyFx:在 .Net 和 Mono 平台上创建 HTTP 服务的一个轻量级、非正式的框架。


  • IISNode:在 IIS 中宿主 NodeJS 应用程序。
  • Suave.IO:一个框架/库/web 服务器,当你看到你使用优美的 F# 编写的代码提前完成了你的项目时,它的存在会让你喜极而泣。(一个用 F# 编写 Web 应用的框架和服务器端)


Web 服务器(Web Servers)

  • EmbedIO:基于 Mono 编写的跨平台的 Web 服务器。
  • XSP:Mono 中的 ASP.NET 宿主服务器。该模块包含了 Apache 模块、FastCGI 模块,可以用于挂载到其它 web 服务器或是作为一个测试用的独立服务器存在(类似微软的 Cassini 项目)。
  • Jexus:强劲、坚固、免费、易用的Linux ASP.NET服务器。


WebSocket

  • SignalR:ASP.NET 库,开发者可以通过它在 web 应用程序中非常简单地实现实时功能。
  • Fleck:Fleck 是一个 C# 实现的 WebSocket 服务器。分支自 Nugget 项目。
  • Websocket-Sharp:WebSocket 协议的 C# 实现,包含客户端和服务器端。
  • XSockets:提供了一组工具,可以在微软 .NET 等平台上构建一个实时应用程序。
  • WebSocket4NET:.NET 2.0+、Xamarin、Mono、Silverlight、Windows Phone 以及 WinRT 下的 WebSocket 客户端。
  • SuperSocket:一个轻量级, 跨平台而且可扩展的 .Net/Mono Socket 服务器程序框架。


Windows 服务(Windows Services)

  • TopShelf:一个简单的服务宿主框架,使用 .NET 构建 Windows 服务。


通讯框架(Communication Frameworks)

  • DotNetty:一个快速开发高性能、高可靠性的非阻塞的事件驱动网络应用框架。
  • Helios:一套高性能的Socket通信中间件。


  • enode: 一个用来开发DDD、CQRS、EDA 以及事件驱动应用程序的框架。


其他列表(Other Lists)

  • .NET-libraries-that-make-your-life-easier:开源的 .NET 库,让你的生活更加轻松。
  • awesome-LINQ:一组精心挑选的超棒的 LINQ 类库、工具等。


看完本文有收获?请转发分享给更多人!!!欢迎大家点赞,留言讨论,喜欢这篇文章可以分享给更多人,关注我每天更新分享有关程序员、科技、编程之类的文章!!!爱你们,,么么哒,,让我们一起愉快的玩耍把!!!

文共5560字,预计学习时长14分钟


图源:unsplash


在使用Ruby编写web应用程序时,创始人David HeinemeierHansson说,他只不过是将以往应用程序的通用部分复制粘贴到新程序中。


包括他在内,所有程序员都喜欢解决难题。尝试解决工作领域内独有难题的唯一方法,是构建一个抽象层,并清除脑海中所有关于基础web程序的细节。使用Rails可以专注解决困难部分,消减重复性工作。Rails命令十分神奇,但我们必须了解每个命令的功能和编写过程。

Rails是什么?

Rails是一种web应用框架。根据模型-视图-控制器(MVC)模式,它包括了创建数据库支持的web应用程序时所需的所有内容。MVC将应用分为三层:模型、视图和控制器,每一层都有特定任务。

模型-视图-控制器(MVC)结构示意图


模型层

模型层代表领域模型(如Account、Product、Person、Post等),概述应用程序中特有的业务逻辑。

在Rails中,数据库支持的模型类源于 ActiveRecord::Base。Active Record支持用户将数据库行的数据表示为对象,并使用业务逻辑方法修饰这些数据对象。大多数Rails模型由数据库支撑,模型也可以是Ruby普通类或实现由 Active Model模块提供的一组接口的Ruby类。

控制层

控制层的功能在于处理传入的HTTP请求以及给出适当响应。通常这一层意味着返回HTML,但Rails控制器还可以生成XML、JSON、PDF、移动专用视图及其他格式。

控制器加载和操作模型,并呈现视图模板,以便生成适当的HTTP响应。在Rails中,传入要求由Action Dispatch发送至相应控制器,控制类来自 ActionController::Base。Action Dispatch和Action Controller一起绑定于Action Pack中。

图源:unsplash


视图层

视图层由“模板”组成,主要负责提供应用程序资源的适当描述。模板可以有多种格式,但大多数视图模板都是带有内嵌Ruby代码的HTML(ERB 文件)。视图通常生成控制器响应,或生成电子邮件正文。在Rails中,视图生成由Action View处理。

开发一款新型Rails应用

首先从头构建一个应用程序,这步之前要确保系统内装有Ruby、RubyGems和Bundler。打开终端导航到一个有权限创建文件的目录。先要做的是安装Rails并通过运行railsnew <project name>命令构建一个新型Rails应用程序。

要从头开始创建只支持API的Rails,创建时--api应在Rails应用程序名称之后:railsnew <my_app_name> --database=postgresql --api (使用Postgresql数据库配置应用程序更为容易,但别忘了在运行命令前安装这一数据库)。例如:rails new Gallery --database=postgresql –api。

通过使用 --api 旗标,Rails能够删除许多默认功能和中间件(大多是涉及无用的浏览器)。控制器继承ActionController::API而非ActionController::Base,生成器会跳过生成视图。为只支持API的Rails构建设置资源无须作任何改变。

将所有所需gem添加至Gemfile中后开始运行bundle install。

· 初始化数据库:rails db:create

· 运行Rails服务器:rails s

Rails生成


Rails团队的首要目标是高效地构建核心应用程序功能。Rails系统拥有大量生成器,能帮助用户完成一些手动作业。生成器除了节省时间,还有一些其他优点:

· 生成器能够为应用程序测试套件设置基本规格。它们会为用户提供一些基本例子而非编写复杂的逻辑测试。

· 经设置,生成器的运行方式保持不变,这样便能标准化代码并帮助用户更有效地开发,原因在于用户不必过多担心手写代码时可能会出现的拼写、语法错误或其他相关漏洞。

· 生成器遵循Rails最佳操作,包括使用RESTful命名模式、删除重复代码、使用部分和许多其他最佳类型设计模式。

然而,某些生成器会创建相当多的代码。如果不使用某个代码,它就会造成应用程序代码不必要的混乱,从而给以后的程序员带来困扰。所以何时使用生成器最好呢?所有Rails生成器作为命令输入终端,并遵循下列语法:

rails generate <name of generator> <options>--no-test-framework


--no-test-framework 是一个旗标,意在提醒生成器不要为新生成模型和控制器等创建任何测试。当用户运行自己的Rails应用程序时则不需要旗标,这十分有助于快速建立测试套件。

为了提高效率,Rails将generate 方法简化为g,因此上述CLI命令可以简化为:

rails g <name of generator> <options>--no-test-framework


图源:unsplash


下列是Rails提供的主要生成器。笔者将分别举例说明:

迁移生成器

Rails有一组遵守规范的优质迁移生成器,能够有效管理数据库模式。绘制域模型后可以进行下一步。首先使用案例库应用程序中的数据库迁移并更新 painters 表。运用下列命令在表中添加一列,将其命名为portrait:

railsg migration add_portrait_to_painters portrait:string --no-test-framework


终端显示创建了迁移文件20200928055457_add_portrait_to_painters.rb.。由于迁移文件名不得重复,生成器会在文件名前加上时间戳。神奇的事情发生了——打开db/migrat 目录中创建的文件,它现在应该是这样:

class AddPortraitToPainters < ActiveRecord::Migration[6.0]
   def change
     add_column :painters, :portrait,:string
   end
end


注意到生成器的作用了吗?它自动感知到用户想添加一个新的列,构建了add_column 方法调用。这是如何做到的?

实践证明,命名迁移文件的方法至关重要。通过在名称前加上add_文本,它向迁移生成器发送了一个信号,即这种模式更改的目的是向表中添加一列/多列。

那么它是如何知道用户想在哪个表上添加的呢?它将_painters 文本附加到迁移名称的末尾,以此告诉Rails用户想更改的表格是 painters 表。最后,通过在命令末尾添加 portrait:string 文本告知生成器新的列的名称为portrait,数据类型为 string。

用户可以通过运行rails db:migrate 更新数据库模式,该模式也会反映出这次变更。

删除列则可以运行另外一个迁移:

railsg migration remove_portrait_from_painters portrait:string


如果打开此迁移文件则会看到下列代码:


class RemovePortraitToPainters < ActiveRecord::Migration[6.0]
   def change
     remove_column :painters, :portrait,:string
   end
end

运行rails db:migrate 后,模式也会得到更新。当需要运行任何未决迁移时可以使用这一命令。

· railsdb:migrate:reset:它会删除数据库信息,在新的数据库运行迁移并重新加载种子数据。

· railsdb:seed:将数据从文件:db/seeds.rb加载到数据库中。这种方法对用Rails项目所需的初始数据填充数据库十分有用。

· railsdb:rollback:回滚上次执行的迁移。它会撤销上一次迁移,接着用户便可编辑文件并重新运行 rails db:migrate 。注意,进行过程中谨慎使用这一命令,因为它极具破坏性,很有可能造成数据丢失。运行时一定确保自己完全清楚运行后的结果。

模型生成器

这是一种经常使用的生成器类型。它适用于编写创建模型和关联数据库表所需的核心代码,且不会使应用程序过于复杂。一般来说需要模型名称(单数和首字母大写)和模型参数。

接下来为带有 name、bio和 genre列的Painter 应用程序添加一个新模型,可以通过以下CLI命令使用模型生成器:

railsg model Painter name:string genre:string bio:text


如果数据类型为字符串,则不需要在列名后指定类型,因为它是默认数据类型。因此如下:

railsg model Painter name genre bio:text


因其水平较高,这一步已经创建了:

· 添加一个表格和name、genre和 bio列的数据库迁移

· 继承ApplicationRecord (自Rails 5起)的模型文件

我们接下来创建另一个属于Painter的模型Painting:

railsg model Painting name image painter:belongs_to


切记首先生成具有has_many宏命令的代码;在运行迁移时只有带有belongs_to 的代码有用,否则会得到错误代码:


ActiveRecord::StatementInvalid:PG::UndefinedTable: ERROR: relation "<some table name>" doesnot exist


运行这一生成器会创建出一个迁移文件和 Painter 和Painting模型。这一特定的生成器创建了一些具有单命令的不同的功能,且仅用最简单的代码就生成出来。接着转向自己的模型,确保建立适当关系(has_many, belongs_to)。

下一步是创建一个迁移:rails db:create 和 rails db:migrate来迁移表格。用户可以在控制台中测试连接,只需要运行rails c并创建一些新的例子,不论正确与否都可以测试验证;接下来测试关联度(如Painter.all.first.painting能够检查第一个painter的painting)

图源:unsplash


控制生成器

运行rails g controller 命令会提供一个控制文件(用于添加适当操作)和相应的视图文件夹:

railsg controller paintings


资源生成器

如果用户在在创建API过程中使用前端MVC架构,或只想手动创建视图,resource生成器是编写代码的一个优选。创建Painting资源:

railsg resource Painting name image painter:belongs_to


因为没有为name和image 编写数据类型,因此默认情况下它是一个字符串。添加 painter:belongs_to 来指定两个表格的关系,并在paintings表格中设置一列 painter_id。也可以使用 references编写上述命令(结果一样):

railsg resource Painting name image painter:references


这是为不同模型编写相同命令的另一个例子:

railsg resource Answer content correct_answer:boolean question:belongs_to

凭借生成器,目前的应用程序拥有什么?

· 一个迁移文件,能够在生成器中为传递给它的属性创建一个新的数据库表

· 继承ApplicationRecord的模型文件(从Rails 5开始,见上述注意事项)

· 继承了ApplicationController的控制器文件

· 不带有视图模板文件的视图目录

· 视图helper文件

· 用于该控制器的特定JavaScripts的Coffeescript文件

· 用于控制器样式的 scss文件

· routes.rb文件内的完整资源调用

resource生成器是一种智能生成器,创建全功能资源所需的一些核心功能,同时不会导致过多代码膨胀。

路由

图源:unsplash


最后一项可能不太常见。通常resources:paintings被视作为一个“魔法”路由,它包含在应用程序中执行CRUD所需的全部RESTful路由。那么resources:paintings会转化成什么?用滤波器运行 rake routes 会比较简单,这样就只会呈现paintings的路由:

rake routes | grep painting


resources自动创建每个路由并使其对控制器可用。打开paintings_controller.rb文件会很有趣:路由列表中出现的操作都不存在。它创建的代码非常少,只需添加应用程序需要的功能。


Scaffold生成器

rails g scaffold User username:string


正确的命令可以创建有用的文件,设置路由和宏命令。希望本文能让你理解Rails的神奇之处,MVC的定义和命令执行。

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范