使用Mono和MVC 4的视图出错

时间:2014-03-03 20:31:24

标签: asp.net-mvc asp.net-mvc-4 mono mod-mono xsp

我正在尝试开始使用Mono框架并遇到了很多问题,其中最新的问题令我恼火。我已经全神贯注地找到了一个解决方案,并且无法弄清楚这一点。

环境
Ubuntu 12.04(在Hyper-V虚拟机上)
Visual Studio 2012(完全更新)
ASP.NET MVC 4
.NET Framework 4
单声道3.4.0(使用make直接从git中提取和编译)
XSP Mono.WebServer2 0.2.0.0(也来自git)

我的单声道安装几乎完全遵循this answer的说明。会发生什么:

  1. 我使用默认选项在VS 2012中创建了一个新的MVC 4项目。
  2. 我在不使用文件系统发布配置文件更改任何引用的DLL的“复制本地”设置的情况下发布了所述应用程序。
  3. 然后,将文件FTP到Ubuntu VM并将它们全部复制到网站主文件夹(/ var / www / mvc,我将其配置为Apache2的默认值)。
  4. 在bash提示符中
  5. cd /var/www/mvc并运行xsp4
  6. 点击服务器/端口并收到此错误:
  7. System.InvalidOperationException
    未找到视图'index'或其主节点,或者没有视图引擎支持搜索的位置。搜索了以下位置:
    〜/浏览/首页/的Index.aspx
    〜/浏览/首页/ Index.ascx
    〜/查看/共享/的Index.aspx
    〜/查看/共享/ Index.ascx
    〜/浏览/首页/ Index.cshtml
    〜/浏览/首页/ Index.vbhtml
    〜/浏览/首页/ Index.cshtml
    〜/ Views / Home / Index.vbhtml

    描述:HTTP 500.错误处理请求。
    详细信息:非Web异常。异常来源(应用程序或对象的名称):System.Web.Mvc。
    异常堆栈跟踪:

    at System.Web.Mvc.ViewResult.FindView(System.Web.Mvc.ControllerContext context) [0x00000] in <filename unknown>:0
    at System.Web.Mvc.ViewResultBase.ExecuteResult(System.Web.Mvc.ControllerContext context) [0x00000] in <filename unknown>:0
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(System.Web.Mvc.ControllerContext controllerContext, System.Web.Mvc.ActionResult actionResult) in <filename unknown>:0
    at System.Web.Mvc.ControllerActionInvoker+<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17 () [0x00000] in <filename unknown>:0
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, System.Web.Mvc.ResultExecutingContext preContext, System.Func`1 continuation) [0x00000] in <filename unknown>:0
    

    版本信息:3.4.0(master / 830c517 Fri Feb 28 16:03:26 CST 2014); ASP.NET版本:4.0.30319.17020

    我尝试了各种编译组合(目标4.5而不是4.0,使用MVC 3而不是4),removed WebPages.OAuth.dll,复制本地化的各种参考组合以及详尽的网络搜索...都无济于事。这与我的Mono版本有关吗? XSP?这个问题有明确的解决方案吗?

    更新
    如果我使用MVC 4项目定位.NET Framework 4.5,则错误更改为:

    System.IO.FileNotFoundException
    无法加载文件或程序集'log4net,Version = 1.2.11.0,Culture = neutral,PublicKeyToken = 669e0ddf0bb1aa2a'或其中一个依赖项。
    描述:HTTP 500.错误处理请求 详细信息:非Web异常。异常来源(应用程序或对象的名称):DotNetOpenAuth.Core 异常堆栈跟踪:

    at DotNetOpenAuth.Logger.Create(System.String name) [0x00000] in <filename unknown>:0
    at DotNetOpenAuth.Logger.CreateWithBanner(System.String name) [0x00000] in <filename unknown>:0
    at DotNetOpenAuth.Logger..cctor() [0x00000] in <filename unknown>:0
    

    我没有使用log4net。

1 个答案:

答案 0 :(得分:4)

经过数天的研究,我学到了很多东西,首先是Ubuntu 12.04不支持 Mono 3.x

所以,MVC 4在那个操作系统上是不可能的(以及我搞砸的大多数其他Linux操作系统)。为了将来的参考,我终于能够让MVC 3在Ubuntu 12.04上运行以下工作:

  1. 使用Hyper-V VM从ISO安装Ubuntu 12.04(我很乐意提供有关该设置的详细信息,如果有人想要的话)。
  2. 安装所有Ubuntu更新(需要重启)。
  3. 打开终端窗口(Ctrl + Alt + T)。
  4. (可选)安装XRDP,允许远程桌面连接到Ubuntu VM。我无法忍受带有* nix系统的Hyper-V的默认终端服务器窗口,因为键盘/鼠标映射很傻。

    sudo apt-get install xrdp

  5. (可选)使用终端上的ifconfig获取可用于远程桌面连接的VM IP地址。

  6. 安装Apache2。

    sudo apt-get install apache2

  7. 安装Apache2线程开发(XSP4需要,安装在下面)。

    sudo apt-get install apache2-threaded-dev

  8. 安装Mono-runtime软件包。

    sudo apt-get install mono-runtime

  9. 安装Mono-complete软件包。

    sudo apt-get install mono-complete

  10. 安装XSP4(这是一个非常轻量级的Web服务器,可用于开发)。

    sudo apt-get install mono-xsp4

  11. 安装ASP.NET示例包。显然,XSP4不会安装所需的一切,但需要单独安装一些ASP.NET组件才能工作。

    sudo apt-get install asp.net-examples

  12. 在此之后,您可以在/var/www中为MVC 3网站设置一个文件夹,并对您的网站进行部署。将某些程序集复制到站点文件夹以使其正常工作非常重要,即:

    • System.Web.Helpers
    • System.Web.Mvc
    • System.Web.Razor
    • System.Web.Routing
    • System.Web.WebPages
    • System.Web.WebPages.Razor
    • System.Web.WebPages.Deployment

    因此,请确保将这些设置为“本地复制”或找出Windows系统上正确版本的位置,然后手动将其复制到站点文件夹中。然后,您可以使用XSP4配置Apache并测试您的站点(再次,如果需要,我会提供详细信息):

    cd /var/www/sitefolder/
    xsp4
    

    这将显示如下内容:

    xsp4
    Listening on address: 0.0.0.0
    Root directory: /var/www/sitefolder
    Listening on port: 8080 (non-secure)
    Hit Return to stop the server.
    

    您可以使用localhost:8080在VM上的浏览器中访问该网站。

    希望这有助于将来。