一、先给你们看一张截图css
若是我告诉你们,这就是一个web管理系统发布后的全部内容,大家会不会以为太简洁了,只有一个web.config、一个Global.asax文件,其它的都是dll文件,没有aspx、cshtml、html页面,没有js css images文件,但它的确能跑起来,跑起来以后的截图以下html
二、再看我新建一个项目的流程web
新建一个ASP.NET MVC 4的空的项目数据库
点肯定以后,建立项目,默认的项目目录结构以下api
而后打开nuget包管理界面,选择咱们须要安装的组件 Zephyr.Web.Sys,这是咱们权限管理系统服务器
点安装进行安装,实现上就是引入dll文件mvc
安装完成后,直接F5运行,就出现了如下页面框架
点建立后ide
咱们选择MySql输入相应的数据库信息测试链接经过后,点建立工具
建立成功
如今登陆跳转到登录页面
登陆成功后
权限系统中页面测试都没有问题
而后咱们回过头看程序,什么都没改变,
只是增长了一些引用及web.config中添加了一些信息。
那回过头来,这样发布后,不就是咱们以前所看到了什么都没有的Web应用程序了
你们是否是也是很感兴趣,我当时也只是一个想法,但直正驱动我去完成这些功能的仍是如下几点:
a 代码的重用性提升,能够很方便的用NuGet管理类库或系统。即便不用NuGet管理,直接把dll文件拷贝到新建项目的bin下面,而后修改下web.config也是能够的。比之前咱们引用项目的方式方便不少。
b 建立一个新项目时只须要安装组件便可
c 发布后的程序干净,项目更新只需覆盖对应的dll便可。
d 更方便作成产品发布
那么咱们要作到前面所看到的,咱们要作哪些工做?
一、准备好要组件化的的类库
二、建立Nuget包
建立NuGet包有不少种方法,我采用的是编译时自动生成NuGet包,
首先要启用NuGet包还原功能(Eable NuGet Package Restore),而后VS会自动下载添加一个.nuget的文件夹
而后编辑项目工程文件,添加最后一行<BuildPackage>true</BuildPackage>
而后编译后就会在bin目录下发现一个后缀为nupkg的文件,这就是咱们要的nuget包
固然你也能够在程序包管理器控制台输入命令行进行打包
也能够下载一个图形化的打包器nuget package explorer
三、推送到NuGet服务上
你能够在https://www.nuget.org/注册上账号,放在nuget官网上
也能够本身搭建一个NuGet服务器:新建一个空项目,安装NuGet.Server而后直接发布就能够了。具体教程网上也不少了。
上传NuGet包只须要执行如下命令
nuget push Zephyr.Core.2.0.0.0.nupkg -s http://192.168.1.100:8888
到这里就已经ok了,你能够在Nuget包管理界面中添加一个程序包源服务地址,而后就能够安装你刚刚上传的包了
一、资源的嵌入
资源的嵌入分两种,一种是静态资源,直接内嵌到程序集中
第二种是动态的页面,能够预编译成类放到程序集中
二、资源的访问
获取嵌入资源的访问地址
public static string GetResourceUrl(Type type string embedFileName)
{
var page = new Page(); return page.ClientScript.GetWebResourceUrl(type, embedFileName); }
固然你也能够经过controller去处理
[AllowAnonymous] [MvcMenuFilter(false)] [WebFrameworkFilter] public class ResourceController : Controller { public ActionResult Index() { var assemblyName = ResourceVirtualPathProvider.ResourceVirtualPath.GetAssemblyName(Request.Path); var filename = ResourceVirtualPathProvider.ResourceVirtualPath.GetResourceName(Request.Path); var assembly = ReflectionHelper.GetAssembly(assemblyName); var stream = ResourceHelper.GetFileStream(assembly,filename); var contentType = ResourceHelper.GetContentType(filename); if (stream == null) return HttpNotFound(); return File(stream, contentType); } }
个人框架Zephyr.Net主要分为:
类库 | 描述 | 依赖 |
Zephyr.Utils | 工具类库 | |
Zephyr.Library | 经常使用其它类库 | |
Zephyr.Data | 数据库访问组件 | |
Zephyr.Core | 框架核心类 | Zephyr.Utils Zephyr.Library Zephyr.Data |
Zephyr.Web.Resource | 静态资源 | |
Zephyr.Web.Mvc | 纵云Mvc框架 | Zephyr.Core |
Zephyr.Web.Sys | 权限管理系统 | Zephyr.Web.Mvc |
以上是七个独立的项目,依赖关系也不直接引用项目,而是从nuget上引用发布程序包,
其中前面四个是类库
Zephyr.Web.Resource是嵌入静态资源的程序集,若是不引入这个文件,直接把静态资源文件夹拷贝进项目中也是能够的。
Zephyr.Web.Mvc是咱们的Mvc框架基础,已经包括了mvc及web api不少的路由注册过滤器设定等设置,而且有Login页面和Index页面,安装了这个组件,即便不安装纵云权限系统组件,程序也同样能够跑起来,只是没有权限系统,是个空的架子。
Zephyr.Web.Sys就是权限系统了,把权限系统的mvc及webapi控制器、View页面、js以及数据库初始化处理都放在这个程序集中。
之后咱们开发新的项目也能够作成跟这个权限系统同样,都放在一个dll中(固然也能够分多个,把controller model等都分红不一样的层),之后只要引入或者bin下面放入这个dll就会动态引入这个模块,很是方便。
打包成nuget packages发布到nuget服务上,大功就告成了,若是有更新,只须要更新版本号从新发布就好了
这样一来,基本就把个人框架以及权限系统都作成组件了,若是新项目须要引入,或者多个项目升级都很方便了。
.NET框架交流群(三) 21549700