使用单声道和 MVC 4 的视图出错



我正在尝试开始使用Mono框架,并遇到了许多问题,其中最新的问题让我很生气。 我已经四处寻找解决方案,但无法弄清楚。

环境
Ubuntu 12.04(在 Hyper-V 虚拟机上)Visual Studio 2012(完全更新)ASP.NET MVC 4.NET Framework 4 Mono 3.4.0

(使用 make 直接从 git 提取和编译)XSP Mono.WebServer2 0.2.0.0(也来自 git)


我的单声道安装几乎完全遵循了这个答案中的说明。 发生的情况是这样的:

  1. 我使用默认选项在VS 2012中创建一个新的MVC 4项目。
  2. 我发布所述应用程序,而无需使用文件系统发布配置文件更改任何引用的DLL的"本地复制"设置。
  3. 然后,将文件FTP到Ubuntu VM,并将它们全部复制到网站主文件夹(/var/www/mvc,我将其配置为Apache2的默认文件夹)。
  4. cd /var/www/mvcbash 提示符并运行xsp4.
  5. 点击服务器/端口并收到此错误:

System.InvalidOperationException
找不到视图"索引"或其主节点,或者没有视图引擎支持搜索的位置。 搜索了以下位置:
~/Views/Home/Index.aspx
~/Views/Home/Index.ascx~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx

~/Views/Home/Index.cshtml~/Views/Home/Index.vbhtml~/Views/Home/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 星期五 2 月 28 日 16:03:26 CST 2014); ASP.NET 版本: 4.0.30319.17020

我尝试了各种编译组合(针对 4.5 而不是 4.0,使用 MVC 3 而不是 4),删除了 WebPages.OAuth.dll,复制本地化的各种参考组合,以及详尽的网络搜索......一切都无济于事。 这与我的单声道版本有关吗? 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。

经过几天的研究,我学到了几件事,首先是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获取可用于远程桌面连接的虚拟机 IP 地址。

  6. 安装 Apache2。

    sudo apt-get install apache2

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

    sudo apt-get install apache2-threaded-dev

  8. 安装单运行时包。

    sudo apt-get install mono-runtime

  9. 安装单声道完整包。

    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

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

  • System.Web.Helpers
  • System.Web.Mvc
  • System.Web.Razor
  • System.Web.Routing
  • 系统.网络.网页
  • System.Web.WebPages.Razor
  • System.Web.WebPages.Deployment

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

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.

您可以使用 VM 上的浏览器访问该站点localhost:8080.

希望这对将来的某人有所帮助。

最新更新