我正在尝试开始使用 Mono 框架,但遇到了许多问题,其中最新的一个让我很恼火。我已经到处寻找解决方案,但无法解决这个问题。
环境
Ubuntu 12.04(在 Hyper-V 虚拟机上)
Visual Studio 2012(全面更新)
ASP.NET MVC 4
.NET框架4
Mono 3.4.0(使用 make 直接从 git 拉取并编译)
XSP Mono.WebServer2 0.2.0.0(也来自 git)
我的单声道安装遵循 this answer 的说明几乎一模一样。发生的事情是这样的:
- 我使用默认选项在 VS 2012 中创建了一个新的 MVC 4 项目。
- 我使用文件系统发布配置文件发布了所述应用程序,但没有更改任何引用的 DLL 的“复制本地”设置。
- 然后,将文件通过 FTP 传输到 Ubuntu VM,并将它们全部复制到网站主文件夹(/var/www/mvc,我将其配置为 Apache2 的默认文件夹)。
cd/var/www/mvc
在 bash 提示符下运行xsp4
。- 点击服务器/端口并收到此错误:
System.InvalidOperationException
未找到 View “索引”或其主视图,或者没有 View 引擎支持搜索的位置。搜索了以下位置:
〜/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。处理请求时出错。
详细信息:非网络异常。异常来源(应用程序或对象的名称):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,2014 年 2 月 28 日星期五 16:03:26 CST); 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。处理请求时出错。
详细信息:非网络异常。异常来源(应用程序或对象的名称):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 上运行,执行以下操作:
- 从 ISO 安装 Ubuntu 12.04使用 Hyper-V 虚拟机(如果有人需要,我很乐意提供有关该设置的详细信息)。
- 安装所有 Ubuntu 更新(需要重新启动)。
- 打开终端窗口 (Ctrl+Alt+T)。
(可选)安装 XRDP,它允许远程桌面连接到 Ubuntu VM。我无法忍受带有 *nix 系统的 Hyper-V 的默认终端服务器窗口,因为键盘/鼠标映射很愚蠢。
sudo apt-get install xrdp
(可选)在终端上使用
ifconfig
获取可用于远程桌面连接的虚拟机 IP 地址。安装 Apache2。
sudo apt-get install apache2
安装 Apache2 线程开发(XSP4 需要,在下面安装)。
sudo apt-get install apache2-threaded-dev
安装 Mono 运行时包。
sudo apt-get install mono-runtime
安装 Mono 完整包。
sudo apt-get install mono-complete
安装 XSP4(这是一个非常轻量级的 Web 服务器,可用于开发)。
sudo apt-get install mono-xsp4
安装 ASP.NET 示例包。显然,XSP4 并没有安装它所需的所有内容,而是需要单独安装一些 ASP.NET 组件才能工作。
sudo apt-get install asp.net-examples
此后,您可以在 /var/www
中为您的 MVC 3 站点设置一个文件夹,并部署您的站点。将某些程序集复制到站点文件夹中以使其正常工作非常重要,即:
- System.Web.Helpers
- 系统.Web.Mvc
- System.Web.Razor
- 系统.Web.路由
- System.Web.WebPages
- 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.
您可以使用 localhost:8080
在虚拟机上的浏览器中访问该站点。
希望这对将来的人有帮助。
关于asp.net-mvc - 使用 Mono 和 MVC 4 的 View 出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22156776/