解读ASP.NET 5 & MVC6系列教程(3):项目发布与部署

2019-05-22 14:51:39王振洲

右键BookStore->发布(Publish)->Settings选项卡->File Publish Options->勾选Precompile during publishing复选框。

这样就可以生成响应的dll文件, 但是这些dll文件依然不在wwwroot/bin目录下,而是在approotpackagesBookStore1.0.0目录下,在该目录下有2个文件夹,分别是libroot,以及相关的Nuget的spec文件,在lib目录下,生成的是不同dnx版本的dll文件,而root则是类似于之前的web根目录,因为在该目录下除了有视图文件以外,还和以前的结构一样,保留了bin目录,并且在bin目录下的Release文件夹下,也有一份针对不同dnx版本的dll文件副本。

提示:上述选择中,另外一个Delete all existing files prior to publish也可以勾选上,以便在发布时将之前发布版本的所有文件全部清空。

此时,我们通过web.cmd文件或者IIS模式来验证发布的文件,经验证,均可以正常运行。再仔细对比两份不同设在的发布文件,发现,除了dll文件以外,web.config文件的应用程序路径也变了,即从原来的:

<add key="kre-app-base" value="..approotsrcBookStore" />

变成了如下版本:

<add key="kre-app-base" value="..approotpackagesBookStore1.0.0root" />

而web.cmd文件的内容,也从如下内容:

@"%~dp0approotpackagesdnx-coreclr-win-x64.1.0.0-beta4bindnx.exe" --appbase "%~dp0approotsrcBookStore" Microsoft.Framework.ApplicationHost web %*

变成了如下内容:

@"%~dp0approotpackageskre-coreclr-win-x64.1.0.0-beta4bindnx.exe" --appbase "%~dp0approotpackagesBookStore1.0.0root" Microsoft.Framework.ApplicationHost web %*

上述变化,我们是可以理解的,即将src源码动态编译运行的模式修改为预编译dll程序集的模式。所以,在这里我们可以看到,在源码动态编译模式下,其发布后的文件夹结构如下:

//源码动态编译模式
wwwroot/bin/Microsoft.AspNet.Loader.IIS.dll
wwwroot/Contents/site.css
wwwroot/Contents/.......................................
........................................................
wwwroot/Scripts/jquery.js
wwwroot/Scripts/........................................
........................................................
........................................................
approot/src/BootStore/project.json
approot/src/BootStore/...............................
approot/src/BootStore.Data/project.json
approot/src/BootStore.Data/..............................
approot/src/BootStore.Bussiness/project.json
approot/src/BootStore.Bussiness/.........................
approot/packages/Elmah/{version}/.......................
........................................................

而dll预编译模式下的发布文件夹结构如下: