[开源]OSharpNS - .net core 快速开发框架 - 快速开始
<h1 id="什么是osharp">什么是OSharp</h1><p>OSharpNS全称OSharp Framework with .NetStandard2.0,是一个基于<code>.NetStandard2.0</code>开发的一个<code>.NetCore</code>快速开发框架。这个框架使用最新稳定版的<code>.NetCore SDK</code>(当前是.NET Core 2.2),对 AspNetCore 的配置、依赖注入、日志、缓存、实体框架、Mvc(WebApi)、身份认证、权限授权等模块进行更高一级的自动化封装,并规范了一套业务实现的代码结构与操作流程,使 .Net Core 框架更易于应用到实际项目开发中。</p>
<ul>
<li>开源地址:https://github.com/i66soft/osharp</li>
<li>官方示例:https://www.osharp.org</li>
<li>文档中心:https://docs.osharp.org</li>
<li>VS 插件:https://marketplace.visualstudio.com/items?itemName=LiuliuSoft.osharp</li>
</ul>
<h1 id="开发环境">开发环境</h1>
<p>OSharp 框架使用现在流行的 <strong>前后端分离</strong> 的架构模式,开发环境的初始化涉及后端开发环境和前端开发环境。</p>
<h2 id="后端开发环境">后端开发环境</h2>
<p>后端开发环境指的是 <strong>.NetCore</strong> 的开发环境,涉及到的开发环境为SDK,IDE,数据库等。</p>
<h3 id="netcore-sdk">.NetCore SDK</h3>
<p>OSharp 框架的后端是基于 .NetCore 的最新稳定版本的,目前最新稳定版本为 <img src="https://img.shields.io/nuget/v/Microsoft.AspNetCore.App.svg" alt="Microsoft.AspNetCore.App" loading="lazy">,当 3.0 版本发布稳定版本之后,不出意外 OSharp 会跟随脚步升级到 3.0,所以,请安装最新版本的 SDK。<br>
最新 SDK 下载地址如下:</p>
<blockquote>
<p>https://dotnet.microsoft.com/download</p>
</blockquote>
<ul>
<li>点击 <strong>Download .NET Core SDK</strong> 按钮进行最新 SDK 的下载。</li>
<li>在服务器部属的时候,不需要完整的 SDK,点击 <strong>Download .NET Core Runtime</strong> 按钮进行最新 Runtime 的下载。</li>
</ul>
<p>安装完成后,在 <code>命令提示符</code> 或 <code>PowerShell</code> 窗口输入如下命令,即可查看到本机已安装的 .NetCore 的 SDK 和 Runtime 版本详细信息</p>
<blockquote>
<p>dotnet --info</p>
</blockquote>
<p>我的电脑输出如下,可以看到,已经安装了 <code>2.2.203</code> 版本的 SDK 和 <code>2.2.4</code> 版本的 Runtime:</p>
<pre><code>.NET Core SDK(反映任何 global.json):
Version: 2.2.203
Commit: e5bab63eca
运行时环境:
OS Name: Windows
OS Version:10.0.17763
OS Platform: Windows
RID: win10-x64
Base Path: C:\Program Files\dotnet\sdk\2.2.203\
Host (useful for support):
Version: 2.2.4
Commit:f95848e524
.NET Core SDKs installed:
2.2.203
.NET Core runtimes installed:
Microsoft.NETCore.App 2.2.4
To install additional .NET Core runtimes or SDKs:
https://aka.ms/dotnet-download
</code></pre>
<h3 id="ide-集成开发环境">IDE (集成开发环境)</h3>
<ul>
<li>Visual Studio 2019:开发 .NET 程序,当前首先宇宙最强IDE <strong>Visual Studio</strong>,.NetCore 2.2 的可用VS版本为 VS2017 和 VS2019,推荐使用最新版本的 VS2019。</li>
<li>Visual Studio Code:如果你觉得VS太过笨重,喜欢比较轻量级的IDE,VS Code 也是个很不错的选择,只需装上 <code>C#</code> 插件即可完美运行 .NetCore 代码。VS Code 也是目前最好用的前端IDE,后面将作为前端IDE进行前端代码的开发。</li>
</ul>
<p>两个IDE都可以在如下的地址中下载:</p>
<blockquote>
<p>https://visualstudio.microsoft.com/zh-hans/downloads/</p>
</blockquote>
<p>补充说明</p>
<blockquote>
<p>当使用 Visual Studio 时,Resharper 这个插件是个不可错过的插件,可以在 智能提示、变量命名、代码优化、代码重构、代码结构导航、dll反编译查看源代码等方面对 Visual Studio 进行大量不可多得的功能补充。当然,这个插件比较吃资源,需要你有一台性能优良的硬件机器才能流畅使用。</p>
</blockquote>
<h3 id="数据库">数据库</h3>
<p>OSharp 框架的数据存储是基于 EntityFrameworkCore (简称EFCore) 这个ORM实现的,只要 EFCore 支持的数据库,都可以作为 OSharp 的数据存储,现已支持数据库如下:</p>
<ul>
<li>Microsift SqlServer 2012+</li>
<li>MySql 5.7+</li>
<li>Sqlite</li>
<li>PostgreSql</li>
<li>Oracle</li>
</ul>
<h2 id="前端开发环境">前端开发环境</h2>
<p>在前后端分离的项目中,三大前端技术框架 Angular、Vue、React 已经成为不可跨越的必选项,基于历史的原因(osharp的.net fx 版本基于AngularJS),OSharp 的前端是基于 Angular 实现的,考虑到 Vue 在国内不可忽视的市场,Vue 版本的前端也在计划之内,而 React 版本目前还没有排上日程。<br>
要上三大前端,NodeJS 是必须的,可在如下地址获得 NodeJS 的安装包:</p>
<blockquote>
<p>https://nodejs.org/en/</p>
</blockquote>
<p>NodeJS 安装 好之后,NPM 也就可以用了。但 NPM 的默认安装源在国外,通常会比较慢,因此需要把 NPM 的安装源设置到国内镜像源,淘宝镜像是个不错的选择,执行如下命令设置将淘宝镜像设置为NPM的安装源:</p>
<blockquote>
<p>npm config set registry https://registry.npm.taobao.org</p>
</blockquote>
<h3 id="angular">Angular</h3>
<p>OSharp 的 Angular <img src="https://img.shields.io/npm/v/@angular/core.svg" alt="" loading="lazy"> 版前端是基于 NG-ALAIN <img src="https://img.shields.io/npm/v/ng-alain.svg" alt="" loading="lazy"> 前端框架开发的。NG-ALAIN 是一个基于 Antd 中后台前端解决方案,提供更多通用性业务模块,让开发者更加专注于业务。<br>
首先,需要通过 npm 命令全局安装 @angular/cli <img src="https://img.shields.io/npm/v/@angular/cli.svg" alt="" loading="lazy"> 运行环境</p>
<blockquote>
<p>npm install -g @angular/cli</p>
</blockquote>
<h3 id="vue">Vue</h3>
<p>OSharp 的 Vue <img src="https://img.shields.io/npm/v/vue.svg" alt="" loading="lazy"> 版前端是基于 IView <img src="https://img.shields.io/npm/v/iview.svg" alt="" loading="lazy"> 前端框架开发的。IView 是一套基于 Vue.js 的高质量 UI 组件库。<br>
首先,需要通过 npm 命令全局安装 @vue/cli <img src="https://img.shields.io/npm/v/@vue/cli.svg" alt="" loading="lazy"> 运行环境</p>
<blockquote>
<p>npm install -g @vue/cli</p>
</blockquote>
<blockquote>
<p>由于精力有限及优先级的问题,Vue版本现在尚未开发完成。</p>
</blockquote>
<h1 id="项目初始化">项目初始化</h1>
<p>每一个新项目,都离不开身份认证,权限授权,系统配置,还有相应的前端操作界面等基础而重复的工作,如果每一个新项目都要从0开始做这些重复性工作,是很无味而繁琐的。因此,OSharp 框架制作了一个基于 <code>dotnet cli</code> 命令行工具的快速启动模板 OSharpNS.Template.Mvc_Angular <img src="https://img.shields.io/nuget/v/OSharpNS.Template.Mvc_Angular.svg" alt="" loading="lazy">,一键搞定这些重复性的模块,让项目启动不再繁琐。下面让我们一起来启动一个新项目。</p>
<h2 id="安装-osharp-的-dotnet-new-项目模板">安装 OSharp 的 dotnet new 项目模板</h2>
<blockquote>
<p>安装项目模板的前提,是已经按照前面的要求下载安装好了 .NetCore SDK。>>飞机票</p>
</blockquote>
<p>在任意空白文件夹,打开 <code>cmd</code> 或 <code>powershell</code> 命令行窗口,执行如下命令安装或更新 OSharp .NetCore CLI 项目模板</p>
<blockquote>
<p>dotnet new -i OSharpNS.Template.Mvc_Angular</p>
</blockquote>
<p>执行后,将能看到 <code>osharp_xxx</code> 系列的命令已安装到 .NetCore CLI 列表中</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Command</th>
<th>Language</th>
<th>Path</th>
</tr>
</thead>
<tbody>
<tr>
<td>OSharp Build Command File</td>
<td>osharp</td>
<td></td>
<td>Web/MVC/OSHARP</td>
</tr>
<tr>
<td>OSharp Solution Project</td>
<td>osharp_sln</td>
<td></td>
<td>Web/MVC/OSHARP</td>
</tr>
<tr>
<td>OSharp Service Core Project</td>
<td>osharp_core</td>
<td></td>
<td>Web/MVC/OSHARP</td>
</tr>
<tr>
<td>OSharp EntityConfiguration Project</td>
<td>osharp_entityconfig</td>
<td></td>
<td>Web/MVC/OSHARP</td>
</tr>
<tr>
<td>OSharp MVC Project</td>
<td>osharp_mvc</td>
<td></td>
<td>Web/MVC/OSHARP</td>
</tr>
<tr>
<td>OSharp Angular Project</td>
<td>osharp_ng</td>
<td>Angular</td>
<td>Web/MVC/OSHARP</td>
</tr>
</tbody>
</table>
<p>其中 <code>osharp</code> 是个一键命令,可通过此命令创建一个完整的项目启动解决方案。下面,我们以创建一个 <strong>博客系统</strong> 为例,完整的步骤如下:</p>
<ol>
<li>
<p>执行 osharp 命令,得到一个 <code>osharp.cmd</code> 脚本文件</p>
<blockquote>
<p>dotnet new osharp</p>
</blockquote>
<p>输出:</p>
</li>
</ol>
<pre><code> 已成功创建模板“OSharp Build Command File”。
</code></pre>
<ol start="2">
<li>
<p>打开 <code>osharp.cmd</code> 脚本文件,进行解决方案生成</p>
<blockquote>
<p>./osharp.cmd</p>
</blockquote>
<p>输出:</p>
</li>
</ol>
<pre><code> -------------------------
- 欢迎使用 OSharp一键模板 命令
- http://www.osharp.org
- Copyright @ 2014 - 2019 OSHARP.ORG
-------------------------
请输入项目名称,推荐形如 “公司.项目”的模式:
</code></pre>
<ol start="3">
<li>
<p>按要求的格式 <strong>公司.项目</strong> 输入项目名称,即生成项目的主命名空间。</p>
<p>例如,公司的代码为 Liuliu,要创建一个博客系统,则输入 <strong>Liuliu.Blogs</strong></p>
<blockquote>
<p>Liuliu.Blogs</p>
</blockquote>
<p>输出:</p>
</li>
</ol>
<pre><code> 已成功创建模板“OSharp Solution Project”。
已成功创建模板“OSharp Service Core Project”。
已成功创建模板“OSharp EntityConfiguration Project”。
已成功创建模板“OSharp MVC Project”。
已成功创建模板“OSharp Angular Project”。
项目代码生成完成
</code></pre>
<p>至此,一个完整的项目启动解决方案创建完成。<br>
完整的创建过程演示如下:<br>
<img src="https://img2018.cnblogs.com/blog/87201/201905/87201-20190504234851679-16308631.gif" alt="" loading="lazy"></p>
<h1 id="打开项目让项目跑起来">打开项目,让项目跑起来</h1>
<h2 id="使用vs2019打开后端-netcore-解决方案">使用VS2019打开后端 .NetCore 解决方案</h2>
<p>使用 VS2019 打开 解决方案文件 <code>Liuliu.Blogs.sln</code>,可以看到各个工程之间的引用关系已经配置好了,OSharp框架的各个依赖类库也已引用了 nuget.org 上的相应版本,并将自动完成类库还原。</p>
<p>解决方案项目结构如下:</p>
<pre><code>Liuliu.Blogs # 解决方案根目录
└─src # 源代码
├─Liuliu.Blogs.Core # 业务层
│├─Common # 通用业务服务
│├─Identity # 身份认证模块业务服务
││├─Dtos # 身份认证模块传输DTO
││├─Entities # 身份认证模块数据实体
││└─Events # 身份认证模块事件处理器
│├─Security # 权限安全模块业务服务
│└─Systems # 系统模块业务服务
├─Liuliu.Blogs.EntityConfiguration # 实体类数据库映射配置工程
│├─Identity # 身份认证模块实体类配置
│├─Security # 权限安全模块实体类配置
│└─Systems # 系统模块实体类配置
└─Liuliu.Blogs.Web # Web工程
├─Areas # 区域文件夹
│└─Admin # 管理区域
│ └─Controllers # 管理API控制器
│ ├─Identity # 身份认证模块API
│ ├─Security # 权限安全模块API
│ └─Systems # 系统模块API
├─Controllers # 前台API
├─Hangfire # Hangfire后台工作
├─Migrations # 数据库迁移
└─Startups # 启动相关代码
</code></pre>
<ul>
<li>Liuliu.Demo.Core: 业务核心工程,顶层文件夹以业务模块内聚,每个文件夹按职责划分文件夹,通常可包含传输对象<code>Dtos</code>、实体类型<code>Entities</code>、事件处理<code>Events</code>等,业务接口IXXXContract与业务实现IXXXService放在外边,如果文件数量多的话也可以建文件夹存放。</li>
<li>Liuliu.Demo.EntityConfiguration: EFCore实体映射工程,用于配置各个业务实体映射到数据库的映射细节。文件夹也推荐按模块内聚。</li>
<li>Liuliu.Demo.Web: 网站的Hosting项目,按常规方式使用即可</li>
</ul>
<p>我们仍需做一点小工作,才能让后端工程跑起来:</p>
<ol>
<li>将 Web 工程 <code>Liuliu.Blogs.Web</code> 设置为启动项目</li>
<li>打开配置文件 <code>appsettings.Development.json</code>,启用相应数据库连接配置,并将数据库连接用户名和密码改为本地环境的用户名和密码</li>
</ol>
<pre><code> "SqlServer": {
"DbContextTypeName": "OSharp.Entity.DefaultDbContext,OSharp.EntityFrameworkCore",
"ConnectionString": "Server=.;Database=Liuliu.Blogs-dev;User Id=sa;
Password=Abc123456!;MultipleActiveResultSets=true",
"DatabaseType": "SqlServer",
"LazyLoadingProxiesEnabled": true,
"AuditEntityEnabled": true,
"AutoMigrationEnabled": true
}
</code></pre>
<p>特别注意:</p>
<blockquote>
<p>数据库配置中,同一上下文(相同的 <code>DbContextTypeName</code>)只能配置一种数据库类型(<code>DatabaseType</code>),并且要保持在 <code>appsettings.json</code> 和 <code>appsettings.Development.json</code> 范围内 <strong>全局唯一</strong>,否则将会引发异常无法正常启动。</p>
</blockquote>
<p>完成配置后,在 VS2019 上按 <code>Ctrl+F5</code> 启动项目,将看到项目正常启动(前提是你已经安装好了相应版本的 .NetCore SDK)。我们将在浏览器看到 <code>Swagger</code> 的API页面:<br>
<img src="https://img2018.cnblogs.com/blog/87201/201905/87201-20190504235115811-743149848.png" alt="" loading="lazy"></p>
<p>打开相应的数据库管理软件(本次使用MSSQL,这里使用VS2019自带的 <code>SQL Server 对象资源管理器</code>),可以看到数据库已经自动生成,并且必要基础数据已经初始化完成:<br>
<img src="https://img2018.cnblogs.com/blog/87201/201905/87201-20190504235130347-2064075304.png" alt="" loading="lazy"></p>
<h2 id="使用vscode打开前端-angular-项目">使用VSCode打开前端 Angular 项目</h2>
<p>使用 VS Code 打开 <code>src/ui/ng-alain</code> 文件夹,前端项目是基于 NG-ALAIN,项目结构如下:</p>
<pre><code> ├── _mock # Mock 数据规则
├── src
│ ├── app
│ │ ├── core # 核心模块
│ │ │ ├── i18n
│ │ │ ├── net
│ │ │ │ └── default.interceptor.ts # 默认HTTP拦截器
│ │ │ ├── services
│ │ │ │ └── startup.service.ts # 初始化项目配置
│ │ │ └── core.module.ts # 核心模块文件
│ │ ├── layout # 通用布局
│ │ ├── routes
│ │ │ ├── ** # 业务目录
│ │ │ ├── routes.module.ts # 业务路由模块
│ │ │ └── routes-routing.module.ts # 业务路由注册口
│ │ ├── shared # 共享模块
│ │ │ └── shared.module.ts # 共享模块文件
│ │ ├── app.component.ts # 根组件
│ │ └── app.module.ts # 根模块
│ │ └── delon.module.ts # @delon模块导入
│ ├── assets # 本地静态资源
│ ├── environments # 环境变量配置
│ ├── styles # 样式目录
└── └── style.less # 样式引导入口
</code></pre>
<p>按 <code>Ctrl + ~</code> 快捷键,调出 VS Code 的命令行控制台,输入 NodeJS 包安装命令:</p>
<blockquote>
<p>npm install</p>
</blockquote>
<p>依赖包安装完成之后,输入项目启动命令</p>
<blockquote>
<p>npm start</p>
</blockquote>
<p>此命令将会执行如下命令:<code>ng serve --port 4201 --proxy-config proxy.config.json --open</code>,其中<code>--proxy-config proxy.config.json</code>对前端项目发起的API请求进行了代理,所有以 <code>/api/</code>开头的请求,都会转发到服务端项目中进行处理,代理的实际配置如下:</p>
<pre><code>{
"/api": {
"target": "http://localhost:7001",
"secure": false
}
}
</code></pre>
<p>至此,项目启动完成,将进入登录界面,如下图所示:<br>
<img src="https://img2018.cnblogs.com/blog/87201/201905/87201-20190504235204282-2114267719.png" alt="" loading="lazy"></p>
<p>需要注册一个用户,才能进入系统。</p>
<blockquote>
<p>第一个注册用户将自动拥有 <strong>最高权限</strong> 的 <strong>超级管理员</strong> 角色身份。</p>
</blockquote>
<p>注册界面:<br>
<img src="https://img2018.cnblogs.com/blog/87201/201905/87201-20190504235216033-939451009.png" alt="" loading="lazy"></p>
<p>后台主页:<br>
<img src="https://img2018.cnblogs.com/blog/87201/201905/87201-20190504235229943-786841993.png" alt="" loading="lazy"></p>
<p>功能管理:<br>
<img src="https://img2018.cnblogs.com/blog/87201/201905/87201-20190504235240053-523394299.png" alt="" loading="lazy"></p>
<p>数据实体管理:<br>
<img src="https://img2018.cnblogs.com/blog/87201/201905/87201-20190504235249264-1356168478.png" alt="" loading="lazy"></p>
</div>
<div id="MySignature" role="contentinfo">
<div id="MySignature_title">如果您看完本篇文章感觉不错,请点击一下右下角的<strong><span style="color: #ff0000; font-size: 18pt">【推荐】</span></strong>来支持一下博主,谢谢!</div>
<div id="MySignature_con">
<hr>
<p><strong>作者</strong>:郭明锋</p>
<p><strong>Q群</strong>:MVC EF技术交流(5008599)<img border="0" src="https://pub.idqqimg.com/wpa/images/group.png" alt="MVC EF 技术交流" title="MVC EF 技术交流"> OSharp开发框架交流(85895249)<img border="0" src="https://pub.idqqimg.com/wpa/images/group.png" alt="OSharp开发框架交流" title="OSharp开发框架交流"></p>
<p><strong>出处</strong>:https://www.cnblogs.com/guomingfeng</p>
<p><strong>声明</strong>:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。</p>
<hr>
</div><br><br>
来源:https://www.cnblogs.com/guomingfeng/p/osharpns-quick-start.html
頁:
[1]