【问题标题】:Is Mono's VB.Net support ready for a production site? [closed]Mono 的 VB.Net 支持是否已准备好用于生产站点? [关闭]
【发布时间】:2011-06-12 15:22:42
【问题描述】:

以前,我只使用以 Microsoft 为中心的解决方案,但对于即将到来的 ASP.Net 项目,我正在考虑使用 Mono 并将其托管在 Linux Amazon EC2 实例上。根据对我的previous question 的回复,这听起来可行。但是,我对 VB.Net 最满意,我想知道 Mono 对它的支持程度如何。

是否有人有使用 VB.Net 为 Mono 编写 ASP.Net 应用程序的第一手经验?如果是这样,我想知道进展如何,您遇到了什么样的兼容性问题,以及您是否认为 Mono 的 VB.Net 支持已准备好在生产站点上使用?

我知道 Mono 的 C#.Net 支持非常好,所以这是我的后备计划,但我真的更喜欢使用 VB.Net。

【问题讨论】:

    标签: .net asp.net vb.net linux mono


    【解决方案1】:

    注意,ASP.Net也可以使用.Net的预编译,然后VB.Net全部编译,所以不管Mono对VB.Net的支持好坏。

    预编译还会在您的页面首次点击时移除初始编译点击。

    还有一件事要记住,以防万一遇到 Mono 的 VB.Net 编译器中的错误。

    【讨论】:

    • 事实上,我认为这是在 Mono 下运行某些东西的唯一方式。有趣的是他们现在有一个 VB.NET 编译器。我得去看看。
    • “新”vb 编译器 (vbnc) 大约有 4 年的历史。在那之前还有一个。
    • 您是否假设 VB 生成的 IL 与 C# 生成的 IL 无法区分?因为这不是 100% 正确的。 C# 中没有像exception filtering 这样的极少数.Net 功能。 .Net 框架中的 Mono 实现可能完全是错误的,除非您尝试运行使用 VB.Net 构建的程序集,否则他们永远不会知道。
    • 虽然它可能不是 100% 正确,但可能是 99+% 正确。再加上 Mono 已经拥有 VB.Net 编译器和 VB.Net 运行时至少 4 年,所以这不是未知的水域。最大的潜在问题是编译器有点落后于最新的 VB.Net 版本(2010),这可以通过使用微软的编译器来缓解。
    • 我想知道是否可以进行预编译,这对我来说是最好的解决方案。所以基本上,我会使用 Visual Studio 进行预编译,然后将编译后的文件放到运行 Mono 的 Web 服务器上?听起来太简单了。
    【解决方案2】:

    根据 Mono 人的说法,Mono 中的 VB.Net 支持相对较新。然而,他们认为它是完全完整的,并且 VB.Net 编译器等通过了他们所有的单元测试。这并不意味着不会有任何错误。

    您绝对应该尝试一下。 VB.Net 完全支持 Mono,它的行为不应该与在 Windows 机器上的行为有任何不同(尽管一如既往,不能保证)。

    【讨论】:

    • 非常正确,感谢您的回复。但是,我想听听使用它的人的意见。我不想让项目部分完成,只是发现我必须将其全部翻译成 C#.Net 才能与 Mono 一起使用。
    • 是的,我担心的是 Mono VB.Net 项目可能已经落后或被放弃了。
    • “相对较新”是相对的。此页面可能是此答案的来源:mono-project.com/VisualBasic.NET_support 它引用单声道 1.2.3 作为起点,稍后引用单声道 2.6。原来的散文很可能从未更新过,曾经很新的东西现在不那么新鲜了。
    • @Joel 我认为他们的意思是相对于 C#。但你是对的,这似乎并不新鲜。
    【解决方案3】:

    VB 编译器并没有被放弃,只是缺少时间阻止了更新到较新的 VB 版本所需的工作。

    目前 vbnc 支持 VB 8(又名 Visual Studio 2005),并带有一些较新 VB 版本的小功能。

    最简单和最安全的方法是在 Windows 上预编译您的网站,在这种情况下,您不必处理任何潜在的编译器问题(您可以使用最新的 Visual Studio 版本)。如果您采用这条路线,则不会遇到任何使用 C# 不会遇到的错误 [1]

    [1]:您会多引用一个程序集:Microsoft.VisualBasic.dll,它可能是错误的来源 - 但如果您遵守被认为是 VB 的良好编程实践(打开 Option Strict)您遇到任何重大新错误的可能性非常低。

    【讨论】:

    • 我同意,预编译是要走的路。阅读 jpobst 的帖子后,我尝试预编译一个小型 ASP.Net 项目并将其托管在支持 Mono 的 Linux 服务器上。 --到目前为止,一切都很好!
    • 如果有人想知道为什么,我将接受的答案从 jpobst 切换到 Rolf,因为 Rolf 提到 VB.Net 项目有一个程序集需要 C#.Net 不需要。我一直想知道为什么即使在预编译时我仍然需要安装 vbnc。根据 jpobst 的回答,我认为没有必要。感谢您回答这个问题,罗尔夫。
    【解决方案4】:

    Mono 项目团队似乎在继续为 VB.NET 进行积极的开发和支持。下一个版本 2.10 的 (draft) release notes 包括 an item regarding the VB compiler,它被列为该版本的主要亮点之一:

    VB 编译器

    VB 编译器 (vbnc) 已 升级为使用 cecil/light 而不是 反射,这使得有可能 创建具有不同的程序集 运行时版本仅使用 1 编译器。这与 我们对 Mono C# 所做的更改 上面详述的编译器。

    默认情况下,vbnc 现在将编译为 4.0 配置文件和一个新脚本 (vbnc2) 已添加到编译到 2.0 配置文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 2013-11-24
      • 2011-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多