Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有办法编写独立于系统的MVC应用程序?_C#_Asp.net Mvc_Cross Platform - Fatal编程技术网

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

C# 有没有办法编写独立于系统的MVC应用程序?,c#,asp.net-mvc,cross-platform,C#,Asp.net Mvc,Cross Platform,在过去的两天里,我尝试在Mono上运行MVC4示例互联网应用程序(在VisualStudio 2010中我们进入:文件->新建->MVC4 WebAPlication->互联网应用程序(使用Razor))时创建的应用程序),以检查我是否可以使用Linux托管任何真正的MVC应用程序 起初-我试着用Xamarian Studio和.NET运行它-没有问题:它显示了启动页面,我可以注册,登录->很棒 然后我简单地从.NET切换到Mono,所有的麻烦都爆发了 首先,它抱怨找不到log4net->安装最

在过去的两天里,我尝试在Mono上运行MVC4示例互联网应用程序(在VisualStudio 2010中我们进入:文件->新建->MVC4 WebAPlication->互联网应用程序(使用Razor))时创建的应用程序),以检查我是否可以使用Linux托管任何真正的MVC应用程序

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

然后我简单地从.NET切换到Mono,所有的麻烦都爆发了

  • 首先,它抱怨找不到log4net->安装最新的log4net解决了这个问题,但它为什么要抱怨呢
  • 然后,EntityFramework->UpdatedEF也修复了一些错误,但是,同样,为什么它不能工作呢
  • 然后我看到启动页面,但尝试注册时抛出:

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

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

    System.InvalidOperationException异常 要调用此方法,“Membership.Provider”属性必须是“ExtendedMembershipProvider”的实例

    我放弃了:/

    据此:

    只要不使用异步控制器,MVC4是兼容的。。。所以问题是,我是做错了什么,还是说单声道兼容性是一个大谎言

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

    提前感谢您的意见

    致以最诚挚的问候。

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

    对于第三点,mono无法识别SimpleMembership的声音。试试这个:


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

    我不是Mono团队的成员,但以下是我的经验和我对如何从.NET迁移到Mono以及为什么会出现故障的观察

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

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

    现在,对于你们的问题,1和2是显而易见的。Mono在GAC中附带了log4net版本,但它不是最新版本。因此,如果您愿意,最好使用您自己的副本。EF6是微软发布的第一个开源版本,所以使用最新版本应该可以减少Mono上的问题

    对于3,我认为您将微软的MVC4程序集复制到了Mono/Linux。请删除需要修补的部分,然后在GAC中使用Mono的部分


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

    尝试使用诸如“.NET到Mono的可移植性问题”之类的标题。我认为当前的标题是模糊的,似乎传达了完全不同的东西。顺便说一句,Xamarin不应该声称“代码一次,运行…”,因为它在一开始就试图避免Java风格的失败。我不知道是谁给了你这些信息,但他/她一定是在误导你。@LexLi:去Xamarin.com:“有了Xamarin,你的应用程序完全用C#编写,在iOS、Android、Windows和Mac上共享相同的代码。”对我来说,“共享相同的代码”意味着“代码一次,到处运行”。此外,mono site上的compatibility matrix声称“MVC4应该可以工作,异步控制器除外”,所以对我来说,这意味着:它应该开箱即用。也许Mono应该将它的语句改为:“MVC4应该可以工作,但您可能必须至少移植一些代码,MS dll提供的一些标准功能可能无法工作”。好吧,这是您自己的解释,当然不是Xamarin的官方声明。此外,Mono是一个开源项目,而不是Xamarin的商业产品。所以对于Xamarin的东西所说的,并不自动适用于Mono。然后对于像Mono这样的开源项目,您最好将“应该工作”理解为“应该工作,但您需要黑客”。在开源世界中,“开箱即用”很少是您可以假设的情况。是的,如果Mono的人可以用你的风格更新他们的维基,可能会更好地避免混乱。很抱歉反应太晚,谢谢你提供的信息,这可以解释一两件事本周晚些时候我会尝试你的建议。虽然我知道Mono不是100%兼容的。。。Xamarian广告声称:“代码一次,在bla-bla-bla上运行”是。。。我甚至不知道怎么称呼他们。还有一些奇怪的原因-无论我是否尝试在Monodevelop/Xamarian studio中创建空的Razor项目,都缺少dll-因此从一开始就必须努力测试简单的MVC4应用程序…:/Xamarin的说法对于BCL是正确的,因为BCL的兼容性更好。微软似乎开始与他们共享测试套件,以帮助提高兼容性。但这是一个持续的过程