.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中,发布文件都会少很多。 ?如果有多模块分开开发,这样发布的时候只需要将自己模块的编译文件进行发布即可,会方便不少。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Windows Workflow Foundation在哪里使用?
- azure-active-directory – 如何从graph.microsoft.com获取
- 记录一下我的windows上的phpstorm中的thinkphp5与xdebugger
- Microsoft Edge不允许对websockets进行localhost环回
- 如何在Windows Phone 8应用程序中使用现有的sqlite数据库
- windows-7 – 为什么NTOSKRNL.exe IMAGE_MACHINETYPE标头字
- CMD常用命令
- windows-server-2008 – 为Windows Server安装使用单个卷/驱
- windows-7 – Windows 7 VPN是否可与Cisco ASA 5510配合使用
- win10专业工作站版本提示windows许可即将过期的解决办法