有没有办法编写独立于系统的MVC应用程序?

时间:2014-04-06 11:55:43

标签: c# asp.net-mvc cross-platform

在过去的两天里,我尝试运行MVC4示例互联网应用程序(我在VisualStudio 2010中创建的应用程序:File-> New-> MVC4 webApllication-> Internet应用程序(带Razor))on单声道,以检查我是否可以使用Linux来托管任何真正的MVC应用程序。

起初 - 我尝试使用Xamarian Studio和.NET运行它 - 没有问题:它显示,启动页面,我可以注册,登录 - >大。

然后我只是从.NET切换到Mono,一切都崩溃了。

  1. 首先它抱怨找不到log4net - >安装最新的log4net解决了这个问题,但为什么它首先抱怨?
  2. 然后,EntityFramework出现了一些错误 - >更新EF修复此问题,但是,再次 - 为什么它没有工作?
  3. 然后我看到了启动页面,但尝试注册抛出:

    System.MissingMemberException延迟初始化的类型没有公共的无参数构造函数。

  4. 当我刷新页面时,上面的错误消失了但是当我尝试注册时我又得到了另一个:

    System.InvalidOperationException     要调用此方法," Membership.Provider" property必须是" ExtendedMembershipProvider"。

    的实例

    我放弃了:/

    根据这个:

    http://mono-project.com/Compatibility

    MVC4是兼容的,因为没有使用异步控制器...所以问题是 - 我在这里做错了什么或Mono兼容性是一个大谎言?

    请允许我补充一点,通过兼容性,我的意思是:使用相同的代码,而不更改任何内容(这是它在Java或QT中的工作方式)。

    提前感谢您的意见。

    最好的问候。

2 个答案:

答案 0 :(得分:2)

关于为什么log4net和EntityFramework导致问题的第1和第2点,我认为这两个框架(.NET和Mono)有不同的程序集。这将是利用框架功能以及构建和优化.NET和Mono的方式的情况。

对于第3点,单声道无法识别像SimpleMembership这样的声音。试试这个:http://goo.gl/hPnzjV

在放弃之前,我会在社区论坛上给单声道团队/帖子发消息......我听说他们反应很敏捷。希望这有帮助!

答案 1 :(得分:1)

我不是来自Mono团队,但下面是我的经验和观察如何从.NET迁移到Mono以及为什么会出现问题。

  • Microsoft不构建ASP.NET MVC或EF来支持Mono。因此,Microsoft的原始程序集(在VS中本地复制)不会像您希望的那样在Mono上工作。通常,Mono在GAC中提供相应的修补程序集(具有相同的名称),因此请使用sudo find / | grep name_of_assembly首先检查GAC中已存在哪些程序集,然后将其从Mono / Linux上的部署文件夹中删除。我们确实看到Microsoft和Xamarin在兼容性方面进行了合作,但是他们需要时间来完成所有工作。

  • 不要在Windows上使用Xamarin Studio进行测试。不,这仍然不可靠,因为它仍然使用.NET。您需要在Linux上使用MonoDevelop。

现在提出问题,1和2是显而易见的。 Mono在GAC中附带了一个log4net版本,但它并不是最新版本。因此,如果您愿意,可以使用您自己的副本。 EF 6是微软的第一个开源版本,因此使用最新版本可以减少Mono上的问题。

对于3,我认为您将Microsoft的MVC 4程序集复制到Mono / Linux。请删除需要修补的内容,然后在GAC中使用Mono的内容。

今天不要期望Java或Qt级别的兼容性,因为Java花了很多年才达到这个水平。你很幸运能看到Java的黄金时段,而.NET / Mono即将到来。