这是一个老问题,所以我可能会比原始海报更多地回答其他人:
托管
如果您使用 Mono 编写,您可以在 Windows、Mac 或 Linux(或 Solaris、FreeBSD 和其他不太可靠的系统)上托管。如果您打算在 Windows 上托管,为什么不在真正的 .NET 上运行您的 Mono 应用程序呢?
如果您不是自己托管它,为什么还要关心它是否托管在 Mono 上?您当然可以使用 Windows、Linux 或 Mac 在 Mono 上编写应用程序,然后将其托管在 Windows/.NET 主机上(如果这些主机最便宜且最容易找到)。只需将 .NET 视为 Mono 的 MS 实现。
我最初遇到了相反的问题。即使我的雇主提供了 Windows 开发环境,我也想在 Linux 上托管。我在 .NET 中开发并托管在 Mono/Linux 上。Mono 以这种方式为我工作得非常好。
我现在的雇主是 Mac 疯子。我昨天刚刚在我们的 Mac 服务器上部署了一个 ASP.NET MVC2 应用程序。我在我的 MacBook Pro 上写了整个东西,一次都没有碰过 Windows。
我最喜欢在 Linux 上运行 .NET/Mono 的主机是Linode。最便宜的计划是每月 20 美元,但我可以在同一台服务器上托管任意数量的应用程序。性能非常好,因此在每月 5 美元的主机上运行良好的任何东西都可以作为 Linode 实例上的四个应用程序之一运行良好,这是肯定的。
与 .NET 的兼容性
我发现最好将 Mono 视为一个平台本身,而不是您的 Microsoft 应用程序的兼容性解决方案。Mono 支持几乎整个 .NET 框架。我喜欢这个,因为它是一个很棒的框架,但我并不真正关心它是否与 MS 兼容。
没有冒犯,但我完全不理解您对“Mono 不支持 LINQ-to-SQL 令我满意,因此我正在考虑使用 Ruby-On-Rails”的含义。Mono 比 Ruby 更支持 LINQ-to-SQL 我会告诉你的。您可以说您坚持使用 Windows 只是因为我认为您确实需要 LINQ-to-SQL。“跨平台”还是“LINQ-to-SQL”对您来说更重要的是什么?
Mono 为您提供了多种数据访问选择。如果您想要像 Rails 提供的 ORM(对象关系映射器),那么您可以选择 NHibernate、Subsonic 或 Castle ActiveRecord 之类的东西。使用 Mono 2.10,您甚至可以使用 WebMatrix Data。当然,您也可以使用良好的 'ole ADO.NET,这就是所有这些东西的基础。
哦,我们不要忘记 Mono 确实支持 LINQ-to-SQL 的事实。我只将它与 SQLite 一起使用过,它工作得很好。我同意它虽然落后于.NET。您现在可能担心实体框架支持。请参阅我上面的评论。
在我看来,问题是 Mono 数据访问与 Rails 数据访问相比如何。我的回答:Rails 集成得更好(更简单),而 Mono 更强大、更灵活。
重型加工
这就是 .NET 和 Mono 真正大放异彩的地方。
您认为编译后的字节码将比解释代码快得多,并且像 C# 这样的静态语言将比像 Ruby 这样的动态语言快得多,这是正确的。当然,最终一切都取决于实现。
我也同意像 C# 这样的静态语言在其他方面有助于扩展性。不过,这确实是个人意见的问题。肯定有人认为用动态语言编写和维护大规模解决方案是可行的。当然,我没有看到很多人这样做。.NET 和 Java 成为企业标准是有原因的。
底线
你应该学习另一个 Web 框架吗?嗯,我认为你应该。这对头脑有好处。
其他 Web 框架是否比 Mono 或 .NET 更好?好吧,这当然取决于需要。我认为 Rails 的人可能比一般的 .NET 人群更快地抽出网站。不过,ASP.NET MVC2+ 确实缩小了差距,我更愿意维护和扩展 .NET 解决方案而不是 Rails 解决方案。另外,我很喜欢 C#,所以我觉得 Ruby 本身并没有那么令人满意,我只需要使用它。当然,这只是我。
另外,只有我,但我发现 Mono 是一个出色的跨平台 Web 开发框架。我每天都选择它而不是其他解决方案。我还发现 Mono 非常适合大多数 .NET 生态系统(尤其是开源世界)。不过,如果你真正想要的是使用最新最好的 MS 东西,并希望 Mono 有时能让你在 Linux 或 Mac 上运行它,那么你可能会失望。
如果 Windows Presentation Foundation (WPF)、Entity Framework 或在较小程度上 LINQ-to-SQL 是您的应用程序策略中最重要的部分,那么 Mono 不适合您。
如果您想要一个平台,它可以为您提供 .NET 的所有巨大优势,并且几乎可以在您需要的任何地方运行,那么 Mono 很难被击败。