.NET和Mono在开发方面的区别

25

我正在了解Mono和.NET C#,未来在项目开发时需要在Linux服务器上运行代码。目前,我一直在研究ASP.NET MVC和Mono。

我使用的是Ubuntu发行版,并希望为Web应用程序进行开发,其他开发人员使用Windows并在Visual Studio中运行其他.NET项目。

Mono没有提供哪些Visual Studio具有的功能?

如果以后在Linux上运行该项目,我们应该使用MonoDevelop吗?

是否存在一些第三方工具或插件可能会影响Mono的使用?


8
我有些困惑,你是在问 Mono 还是 MonoDevelop?它们是两个不同的东西。将 Mono 与 Visual Studio 进行比较就像是在比较苹果和橙子。MonoDevelop 和 Visual Studio 是集成开发环境(IDE), 而 Mono 和 .NET 是 CLI (公共语言基础结构) 以及相关类库和编译器的实现。 - Brad Cunningham
我想问的是IDE和语言之间有什么区别? - Jason
1
那就是两个非常不同的问题。很多人在使用Windows上使用.NET而没有使用Visual Studio。 - Ken
29
你所说的“很多人”,是指少数人吗? - Chris S
8个回答

20
Mono不能提供哪些Visual Studio提供的功能?
你可能指的是MonoDevelop。 MonoDevelop基于GTK,可在Linux、Mac OS X、Windows上进行跨平台开发。 然而,由于明显的原因-它只有3个人在开发,而不是数百人,所以它不如Visual Studio那样完善。 它有一些不错的功能,尤其是其源代码控制插件架构。 然而,由于Visual Studio Express是免费的,在Windows上使用它并没有太多优势。
它使用与Visual Studio相同的.csproj和.sln格式,但XML文档格式不同。 如果稍后在Linux上运行这个程序,我们应该使用MonoDevelop吗?
正如我上面提到的,项目格式是可以互操作的。 是否存在一些第三方工具或插件将来可能会对Mono造成问题?
与Visual Studio不同,Monodevelop没有大量的插件可用。在Monodevelop中使用的任何插件都不会影响您的.csproj文件,因为任何Visual Studio无法读取的内容通常都会被忽略。
正如人们所说,不要把Mono和MonoDevelop混淆起来。 MonoDevelop是Mono的IDE,最初来自(分叉)SharpDevelop。
Mono是跨平台框架,模仿Microsoft CLR和框架库。

大多数是可互操作的。这就是一个不同之处。此外,如果文件名的大小写敏感性错误,则即使它是可互操作的,在没有默认支持大小写不敏感的文件系统时,如Linux,也会导致问题。 - Stefan Steiger

5

我在这个领域没有太多经验,但是...

Mono项目路线图提供了一个功能概述,其中包括与MS.NET相比新的、即将推出的以及不包含在Mono中的功能。即使Mono有与.NET相同的类,也要注意兼容性不是100%(尽管这通常是他们的目标)。我不确定是否存在一个全面的缺失列表。

MonoDevelop现在可在Windows和Linux上使用,所以您最好使用它。但是,请注意,MonoDevelop似乎使用与Visual Studio和SharpDevelop相同的项目文件格式,因此您可以尝试混合IDE。

当然,在使用第三方.NET库时,请注意许多库未经过与mono的兼容性测试,特别是任何使用P/Invoke的内容都无法在Linux上的Mono上运行。但是,与mono的大多数不兼容性都很小,如果您坚持使用开源库,您可以随时解决遇到的任何不兼容性问题。


5

您还可以查看Visual Studio的Mono工具。它使您的Visual Studio开发人员能够针对Mono平台进行目标和测试。


很好,但有没有开源版本?我有一个类库可以在两个框架之间兼容,我想要一个项目,并且能够为两者设置构建目标。 - Jeff LaFay

1

你的目标是始终拥有支持,并/或主要在Linux上使用软件,对吗?这实际上是我不久前在一个会议上问Mono开发人员的问题,它基本上归结为你想用它做什么。

如果你希望它始终在Linux上正常工作,则使用Mono。如果您只关心Windows,则使用Visual Studio。

如果您正在使用Mono,则在所有开发者之间使用MonoDevelop。这将使以后的生活变得轻松得多,并确保您在其中编写的任何内容都适用于所有人。

不幸的是,我不知道Mono与.NET的确切限制/优势的答案,除了.NET更加先进,而Mono则在追赶,也不知道不同的插件。


1
如果可以的话,建议避免使用Mono实现的Remoting。似乎存在一些意外的问题,并且调试并不直观。
我们有一个非常依赖Remoting的产品,我们尝试将其移植到Mono上以支持Linux。由于无法解决Remoting问题,最终我们不得不放弃支持Linux的尝试。
注意:我的经验可能已经过时。请参见下面的评论。

好的,这正是我在寻找的答案类型,关于Mono在哪些方面存在问题的真实经验。 - Jason
那是多久之前的事情呢?我很好奇自那时起是否已经修复了,如果那是几年前的话。 - Buddy Lindsey
@percent20:1-2年前的经验。如果您发现我的经验已过时,请在此处评论,我会更新我的答案。 - Dinah
我同意,尤其是在Mono 2.4之前,有很多小问题。以前,在Remoting中传输DateTime时,必须将其转换为字符串(最好是yyyymmdd),然后在Remoting中将其转换回DateTime。但这些问题现在已经解决了。虽然最近我在Mono 2.4中遇到了另一个错误,它可以在datatable.Columns的DefaultValue中传输任何类型(字符串、日期时间、十进制等),除了Guid。我所做的解决方法是将Guid默认值放在另一个DataTable中,表示为DataRow;然后在前端,只需从另一个DataTable中分配DefaultValue即可。 - Michael Buen
自2006年起,我在Mono和Ubuntu上运行我的Remoting和ASP.NET程序。重要的是,早期和经常性地进行测试,以便您可以准确定位错误发生的位置并进行必要的调整。 - Michael Buen

1

如果您的开发人员没有必要使用Mono进行某些功能的开发,我建议您们都在Windows上使用Visual Studio。然后通过以下方式测试应用程序:

  1. Visual Studio的Mono工具
  2. 手动复制二进制文件
  3. 在Linux上检出代码并在MonoDevelop中构建。

个人经历了许多小问题,当我尝试第三种方法时,但幸运的是我能够找到解决方法。

只有当您接触Mono时,您才会知道应用程序的哪一部分需要调整。

http://www.mono-project.com/Start


0

在Linux中运行ASP.NET程序时,您不需要MonoDevelop,只需在开发服务器(VMWare或实际服务器)上创建共享文件夹,并经常进行测试,以便轻松解决Mono缺失的问题。

这是我在Ubuntu服务器上托管的.NET Remoting程序所使用的相同方法。但是我做了相反的事情,因为我是一个独立的程序员,我在我的Windows开发机上创建了一个共享文件夹,然后访问我的Ubuntu测试服务器(vmware'd)上的该共享文件夹。对于ASP.NET内容,如果更改未在Ubuntu测试服务器上反映出来,请在终端中触摸Ubuntu测试服务器上的Web.Config文件。即touch Web.Config,然后刷新页面。


0
Mono拥有完全功能的ASP.NET实现。这包括对ASP.NET Web Forms和Web Services的全面支持。这基本上意味着,您使用.NET Framework开发的几乎任何ASP.NET应用程序都可以在Mono上运行。显然可能需要进行更改,例如数据访问更改,删除对.NET Framework BCL类型的任何依赖。 Mono- Oracle users-.Net Programming C#: ubuntu 11.04

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接