在过去的两天里,我尝试运行MVC4示例互联网应用程序(我在VisualStudio 2010中创建的应用程序:File-> New-> MVC4 webApllication-> Internet应用程序(带Razor))on单声道,以检查我是否可以使用Linux来托管任何真正的MVC应用程序。
起初 - 我尝试使用Xamarian Studio和.NET运行它 - 没有问题:它显示,启动页面,我可以注册,登录 - >大。
然后我只是从.NET切换到Mono,一切都崩溃了。
然后我看到了启动页面,但尝试注册抛出:
System.MissingMemberException延迟初始化的类型没有公共的无参数构造函数。
当我刷新页面时,上面的错误消失了但是当我尝试注册时我又得到了另一个:
System.InvalidOperationException 要调用此方法," Membership.Provider" property必须是" ExtendedMembershipProvider"。
的实例我放弃了:/
根据这个:
http://mono-project.com/Compatibility
MVC4是兼容的,因为没有使用异步控制器...所以问题是 - 我在这里做错了什么或Mono兼容性是一个大谎言?
请允许我补充一点,通过兼容性,我的意思是:使用相同的代码,而不更改任何内容(这是它在Java或QT中的工作方式)。
提前感谢您的意见。
最好的问候。
答案 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即将到来。