一、先給你們看一張截圖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