以前做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,增加红色代码。

         public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
} app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy(); app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}"); 24 //启用area
25 routes.MapRoute(
26 name: "area",
27 template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
28 );
});
}

    4.Web.Authority项目参照mvc的结构,增加Controllers,Model,Views等目录。

    5.在Controllers文件夹中,增加controller,.net core 现在可以直接用 区域属性标记Area.

  using Microsoft.AspNetCore.Mvc;

  namespace Tiandi.Web.Authority.Controllers
{
[Area("sys")]
public class BaseUserController : Controller
{
public ActionResult Index()
{
return View();
}
}
}

    6.参照mvc的结构,自己创建视图。在页面index.cshtml右键,属性,设置生成操作为内容,这个非常重要。

    7.这样运行项目进行调试,浏览器输入路径 https://localhost:44386/sys/BaseUser/index 进行访问,可以看到正常进入Controller,但是提示找不到页面。

      

    8.在页面提示中可以明显看到提示,在那些路径中查找没有找到目录。那么可能是view的搜索区域有问题。后面百度搜索了一堆,搜索到了RazorViewEngineOptions等。

      在Startup类ConfigureServices方法增加如下代码:

         public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
//用于寻找其他类库的页面
services.Configure<RazorViewEngineOptions>(options =>
11 {
12 options.AreaViewLocationFormats.Clear();
13 options.AreaViewLocationFormats.Add("/Views/{1}/{0}.cshtml");
14 });
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

   9、记得步骤6中的页面设置生成属性。再次运行,可以看到找到类库中的页面。

大功告成,这样Web.Authority项目的内容只会生成编译文件,并不会将View的页面复制到Web.Admin中,发布文件都会少很多。

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

.net core Area独立成单独的dll文件的更多相关文章

  1. .NET CORE 热更新,否则提示DLL文件在使用中

    1.创建空目录,取名updatesite,里面放置app_ffline.htm文件,网站更新中访问使用,内容随意 2.updatesite目录下面创建Release目录,用于放置更新的dll文件 3. ...

  2. webpack7--css压缩成单独的css文件

    先看下下面的图片: 我们可以看到,通过Webpack打包后,默认CSS是通过 内部样式表 写入的.我们如何把压缩后的CSS单独导出为CSS 呢? 1.安装 extract-text-webpack-p ...

  3. apache 日志为每个域名独立配置单独的日志文件

    <VirtualHost *:80>DocumentRoot "E:\luyou\viplijiang"ServerName vip.li.comTransferLog ...

  4. 深入理解.NET Core的基元: deps.json, runtimeconfig.json, dll文件

    原文链接: Deep-dive into .NET Core primitives: deps.json, runtimeconfig.json, and dll's 作者: Nate McMaste ...

  5. 为何.NET Core控制台项目发布后是一个dll文件,而不是exe文件?

    项目中有一个.NET Core控制台项目叫ConsoleCoreApp,写好代码后准备发布: 结果发布后生成的是一个dll文件...为不是一个exe的可执行文件: 后来了解到.NET Core的项目分 ...

  6. 分布式计算 要不要把写日志独立成一个Server Remote Procedure Call Protocol

    w https://en.wikipedia.org/wiki/Remote_procedure_call In distributed computing a remote procedure ca ...

  7. vs单独调试dll

    用生成好的exe单独调试dll,右键项目属性->调试->命令->选择exe

  8. C#.NET常见问题(FAQ)-如何将cs文件编译成dll文件 exe文件 如何调用dll文件

    比如我要把TestDLL.cs文件编译成dll文件,则在命令提示符下,输入下面的命令,生成的文件为TestDLL.dll csc /target:library TestDLL.cs 注意前提是你安装 ...

  9. 咏南中间件更新日志--将数据库配置独立成DBCONFIG.EXE

    咏南中间件更新日志--将数据库配置独立成DBCONFIG.EXE.

随机推荐

  1. Python之路(第二十五篇) 面向对象初级:反射、内置方法

    [TOC] 一.反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它 ...

  2. [ES]ES查询指南

    我们通常用用_cat API检测集群是否健康. 确保9200端口号可用: curl 'localhost:9200/_cat/health?v' 绿色表示一切正常, 黄色表示所有的数据可用但是部分副本 ...

  3. Hadoop知识点

    1.小文件合并:如果文件有一定的规律或者是在同一个文件夹下,可以采用获取文件夹下所有的文件,通过流进行合并,然后再存到hdfs上. 2.mapreduce的优点:1.离线计算.2.高容错性,一个节点挂 ...

  4. css的基础用法之标签选择

    一.css的4种引入方式 #.内联式 <p style="color: red;font-size: 50px;text-align: center">Egon是一个非 ...

  5. git版本控制工具的使用(2)

    git checkout -b dev创建一个为dev的分支.并选择该分支. git branch dev 创建分支 git checkout dev 选择该分支 git branch 查看当前分支和 ...

  6. 再一道区间DP -- P4170 [CQOI2007]涂色

    https://www.luogu.org/problemnew/show/P4170 一道简单的区间DP,注意读入 #include <bits/stdc++.h> #define up ...

  7. 2018.11.07 bzoj1965: [Ahoi2005]SHUFFLE 洗牌(快速幂+exgcd)

    传送门 发现自己的程序跑得好慢啊233. 管他的反正AC了 先手玩样例找了一波规律发现题目要求的就是a∗2m≡l(modn+1)a*2^m\equiv l \pmod {n+1}a∗2m≡l(modn ...

  8. Spring+mvc错误

    1.2016-11-13 16:49:22 原因:@ResponseBody注解没加

  9. Codeforces Round #516 (Div. 2, by Moscow Team Olympiad) D. Labyrinth(重识搜索)

    https://codeforces.com/contest/1064/problem/D 题意 给你一个有障碍的图,限制你向左向右走的次数,问你可以到达格子的个数 思路 可以定义状态为vi[x][y ...

  10. hibernate添加数据报错:Could not execute JDBC batch update

    报错如下图所示: 报错原因:在配置文件或注解里设置了字段关联,但数据却没有关联. 解决方法:我的错误是向一个多对多的关联表里插入数据,由于表中一个字段的数据是从另一张表里get到的,通过调试发现,从以 ...