• .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中,发布文件都会少很多。

     如果有多模块分开开发,这样发布的时候只需要将自己模块的编译文件进行发布即可,会方便不少。

  • 相关阅读:
    网络基础相关知识内容
    json模块的转义dump 和反转义 loap
    常用模块--time,sys,os,json
    正则表达式
    day_24 模块和包
    day23_内置函数(__del__ item系列 ,模块)
    LuoguP3806 【模板】点分治1 (点分治)
    BZOJ1305/Luogu3153 [CQOI2009]dance跳舞 (network flow)
    LuoguP2217 [HAOI2007]分割矩阵 (DP + memorized search)
    BZOJ3224/LuoguP3369 普通平衡树 (splay)
  • 原文地址:https://www.cnblogs.com/tiandi0808/p/10584890.html
Copyright © 2020-2023  润新知