/ 技术

ASP.NET Core初体验

前两天试了下ASP.NET Core MVC,很好用。微软整合了大量前端工具,npm、Bower都可以很方便地使用了,甚至对Grunt、Gulp这类的工具都有集成一些任务管理器,这对前端来说,是一件鼓舞人心的事。

ASP.NET Core MVC的推荐目录结构也进行了调整,新增了wwwroot这样一个静态目录,js、css、图片都可以放这里面,而Bower管理的第三方前端库则会自动下载到wwwroot里面的lib目录下。作为强迫症的我,wwwroot这个目录必须全部是自动生成的。通过Gulp,可以很轻松的实现这一点。继承原先的目录结构习惯,在解决方案下建立Scripts、Styles、Images文件夹,里面用来放原始的js、less和图片,然后通过Gulp进行合并、压缩、复制到wwwroot目录下,这样wwwroot这个目录就可以在git里面排除掉了。完美。而在ASP.NET Core的项目目录下默认的.gitignore文件里,微软其实是已经有这样的想法:

# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

在代码层面,和之前差别不大,基本上M、V、C的代码都可以直接拿过来用。在bundle上有一些变化,然而我是直接删掉了默认的bundle配置,既然可以方便地使用Gulp了,为啥不用呢?

在View中,新增了environment的语法,可以通过environment标签来控制开发环境和生产环境的不同输出,主要是用来控制css、js这些文件的引用,在开发环境下使用未压缩的文件,在生产环境下使用压缩过的文件。还提供了cdn的方式,可以配置多个链接,优先使用CDN的链接,通过asp-fallback-test来检查CDN的链接是否可用,不可用的话再切换为本地的链接。和之前Bundle里面的方式差不多,只是使用起来更简单了。现在css、js这些文件的缓存控制也比以前更简单,只需要加上asp-append-version="true"即可在文件名后面自动加上版本号后缀。

项目部署上面,确实遇到了一个坑。我是通过Web Deploy来自动部署的,花了半天时间才终于搞定。

  1. IIS里应用程序池中的.NET CLR版本要选择“无托管代码”

  2. 安装.NET Core Windows Server Hosting,这里有个大坑,安装完之后要执行一下iisreset,我没有执行这一步,导致出现了HTTP Error 502.5 - Process Failure的问题,从事件查看器里面看到的错误日志是:Failed to start process with commandline '"dotnet" .\****.dll', ErrorCode = '0x80070002'.。遇到同样问题的朋友可以试试iisreset或者重启机器。

  3. 安装HttpPlatformHandler

  4. 还有个就是我当时用Web Delpoy往服务器部署的时候,文件总是推不上去,后来Google了一下,在pubxml里面加上了以下两行:

    	<AllowUntrustedCertificate>True</AllowUntrustedCertificate>
    	<UsePowerShell>False</UsePowerShell>
    
  5. 下载Provisioning PowerShell script,在服务器上使用PowerShell运行,输入应用程序池的名称即可。