1. 程式人生 > >.net core Area獨立成單獨的dll文件

.net core Area獨立成單獨的dll文件

sys 復制 and netcore 技術分享 開開 context 譯文 del

原文:.net core Area獨立成單獨的dll文件

  以前做MES項目遇到過這個情況,一個項目有7到8個大模塊,生產、質量、物耗、電子看板、設備等,每個模塊都有大量業務,這樣使用mvc結構如果所有模塊放在一個目錄中,那麽勢必會產生很多問題,各模塊代碼不好管理,每個模塊不能單獨發布,這時候如果能夠將每個模塊單獨成一個項目,那麽感覺會方便很多。

  可能很多人都想到用Area用作分區,但是這個還是在同一個項目中,如果模塊較多,controller過多,還是感覺太臃腫。當時公司項目就是每個模塊都是一個項目,不過當時是個菜鳥(現在也是),沒註意過也沒去研究過,後面走了之後,也沒遇到過很多模塊(一個模塊很多業務)的項目,所以一直沒有去研究。最近自己想自己做一個通用權限的系統,就想著將這個權限管理通用出來,單獨為一個項目,這樣做成一個後臺開發平臺框架。

  網上搜索過“如何將area單獨為一個dll”等等。

  找到如下資料:

  ASP.NET MVC Area使用-將Area設置成獨立項目 : https://www.cnblogs.com/zhuji/p/5179944.html

  使用Areas分離ASP.NET MVC項目 : https://www.cnblogs.com/dingji/archive/2012/05/30/2506420.html

  自己試著做過,但是感覺腦子不夠,沒成功。

  正好最近在研究 .net core,裏面有個 Razor類庫的概念:

技術分享圖片

  瞬間感覺好像就是我在找的東西。

開始

  1.新建 web 應用項目(web.Admin)

  技術分享圖片

  技術分享圖片

  2.添加razor類庫(web.Authority),記得在Web.Admin項目中引用該項目。

    技術分享圖片

  3. 在Web.Admin項目中啟用 Area ,

    在Startup類Configure,增加紅色代碼。

 1         public void Configure(IApplicationBuilder app, IHostingEnvironment env)
2 { 3 if (env.IsDevelopment()) 4 { 5 app.UseDeveloperExceptionPage(); 6 } 7 else 8 { 9 app.UseExceptionHandler("/Home/Error"); 10 // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. 11 app.UseHsts(); 12 } 13 14 app.UseHttpsRedirection(); 15 app.UseStaticFiles(); 16 app.UseCookiePolicy(); 17 18 app.UseMvc(routes => 19 { 20 routes.MapRoute( 21 name: "default", 22 template: "{controller=Home}/{action=Index}/{id?}"); 23 24 //啟用area 25 routes.MapRoute( 26 name: "area", 27 template: "{area:exists}/{controller=Home}/{action=Index}/{id?}" 28 ); 29 }); 30 }

    4.Web.Authority項目參照mvc的結構,增加Controllers,Model,Views等目錄。

    5.在Controllers文件夾中,增加controller,.net core 現在可以直接用 區域屬性標記Area.

 1  using Microsoft.AspNetCore.Mvc;
 2  
 3  namespace Tiandi.Web.Authority.Controllers
 4  {
 5      [Area("sys")]
 6      public class BaseUserController : Controller
 7     {
 8          public ActionResult Index()
 9         {
10             return View();
11          }
12      }
13  }

    6.參照mvc的結構,自己創建視圖。在頁面index.cshtml右鍵,屬性,設置生成操作為內容,這個非常重要。

技術分享圖片技術分享圖片

    7.這樣運行項目進行調試,瀏覽器輸入路徑 https://localhost:44386/sys/BaseUser/index 進行訪問,可以看到正常進入Controller,但是提示找不到頁面。

      技術分享圖片

    8.在頁面提示中可以明顯看到提示,在那些路徑中查找沒有找到目錄。那麽可能是view的搜索區域有問題。後面百度搜索了一堆,搜索到了RazorViewEngineOptions等。

      在Startup類ConfigureServices方法增加如下代碼:

 1         public void ConfigureServices(IServiceCollection services)
 2         {
 3             services.Configure<CookiePolicyOptions>(options =>
 4             {
 5                 // This lambda determines whether user consent for non-essential cookies is needed for a given request.
 6                 options.CheckConsentNeeded = context => true;
 7                 options.MinimumSameSitePolicy = SameSiteMode.None;
 8             });
 9             //用於尋找其他類庫的頁面
10             services.Configure<RazorViewEngineOptions>(options =>
11             {
12                 options.AreaViewLocationFormats.Clear();
13                 options.AreaViewLocationFormats.Add("/Views/{1}/{0}.cshtml");
14             });
15             services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
16         }

   9、記得步驟6中的頁面甚至生成屬性。再次運行,可以看到找到類庫中的頁面。

技術分享圖片

大功告成,這樣Web.Authority項目的內容只會生成編譯文件,並不會將View的頁面復制到Web.Admin中,發布文件都會少很多。

如果有多模塊分開開發,這樣發布的時候只需要將自己模塊的編譯文件進行發布即可,會方便不少。

.net core Area獨立成單獨的dll文件