Run ASP.NET MVC site on mac (mono/xamarin studio)
我们选择用xamarin studio来测试,如果你直接进xamarin的官网,那么会有一个更好看的网站和更复杂的流程(比如需要注册),我们直接到mono项目找mac的支持吧,点此进入
- 相关sdk和app都安装好后,进入xamarin studio(如果有更新,那就更新一下),我们建一个asp.net mvc3项目(时至今日,mvc已经是5.1了,这个待会说)
- 项目建好后,我们发现有两个引用找不到文件:system.web.helpers和system.web.webpages,网上有让你从gac里自行添加进去的方法,我们不这么做,直接删掉,然后,我们从nuget来安装最新的mvc
- 如何为xamarin添加nuget插件
- 接下来在项目或者引用文件夹上右键,管理nuget package,我们搜索“mvc”关键词,得到
Microsoft ASP.NET MVC
这个项目,点击安装 - 同意协议并安装后,下方的message会提示你不能安装到.net 4.0的项目上,于是我们退出package manager,在解决方案管理器内右键项目,选择'Options/Build/General',在Target framework里面选上
Mono/.NET 4.5
即可 - 重新从nuget添加,我们发现装好后,mvc已经是5.1了
- packages.config:
<package id="Microsoft.AspNet.Mvc" version="5.1.1" targetFramework="net45" />
- web.config:
- packages.config:
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
</dependentAssembly>
- 为了让错误来提示我们应该改什么,而不是死记硬背,我们先运行一下项目
- 得到一个
Access to the path "/Library/Frameworks/Mono.framework/Versions/3.2.5/etc/mono/registry" is denied.
的错误,点此查看解决办法,我选择了执行脚本的方法,而不是去修改csproj文件 - 重新测试运行,得到一个
System.InvalidOperationException Conflicting versions of ASP.NET Web Pages detected: specified version is “1.0.0.0”, but the version in bin is “3.0.0.0”. To continue, remove files from the application’s bin directory or remove the version specification in web.config
错误,我们找到项目的web.config文件,直接删除掉appSetting
节点下的<add key="webpages:Version" value="1.0.0.0" />
(你也可以改为3.0.0.0) - 继续测试,得到一个错误:
System.InvalidOperationExceptionCould not locate Razor Host Factory type: System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0
,这个时候,找到view
目录下的web.config文件,定位到system.web.webPages.razor/host
节点(错误提示很明确了),把其中的3.0.0.0改为5.1.0.0 - 到目前为止,我的程序已经是能跑起来了。
- 得到一个