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 来自动部署的,花了半天时间才终于搞定。
- IIS 里应用程序池中的
.NET CLR
版本要选择“无托管代码” - 安装
.NET Core Windows Server Hosting
,这里有个大坑,安装完之后要执行一下iisreset
,我没有执行这一步,导致出现了HTTP Error 502.5 - Process Failure
的问题,从事件查看器里面看到的错误日志是:Failed to start process with commandline '"dotnet" .\****.dll', ErrorCode = '0x80070002'.
。遇到同样问题的朋友可以试试iisreset
或者重启机器。 - 安装
HttpPlatformHandler
。 - 还有个就是我当时用 Web Delpoy 往服务器部署的时候,文件总是推不上去,后来 Google 了一下,在 pubxml 里面加上了以下两行:
<AllowUntrustedCertificate>True</AllowUntrustedCertificate>
<UsePowerShell>False</UsePowerShell>
- 下载Provisioning PowerShell script,在服务器上使用
PowerShell
运行,输入应用程序池的名称即可。