文章类型

原创使用PdfSharp从模板生成Pdf文件

使用PdfSharp从模板生成Pdf文件
最近在做一个生成文档的需求。通过先制作一个包含各字段占位符的文档模板,导入这个模板并填写内容替换掉占位符,再输出成最终文件。由于版式固定,安全性更好,业务上常用Pdf作为最终标准化的格式, 在.Net平台下,可以使用PdfSharp导入,编辑,导出Pdf文档。

原创[学习笔记]使用Docker+Jenkin自动化流水线发布.Net应用

[学习笔记]使用Docker+Jenkin自动化流水线发布.Net应用
使用Docker容器方案可以快速安全地将项目部署到客户的服务器上,作为公司项目,需要解决两个问题:1. 需要搭建一个私有的Docker仓库,以便安全的存储镜像2. 需要一套自动化发布方案,实现代码到应用部署的自动化流程大致流程如下在java世界中有很多文章介绍了Docker+Jenkin的自动化部署方式,这次来看看如何用这一套工具实现.Net 应用的发布。以Soa项目为例MatoApps/Soa: 一个轻量级的微服务库,基于.Net 6 + Abp框架 可快速地将现有项目改造成为面向服务体系结构,实现模块间

原创将Abp移植进.NET MAUI项目(二):配置与基类编写

将Abp移植进.NET MAUI项目(二):配置与基类编写
因为我们要做一个数据持久化型的小应用,所以在完成Abp功能的集成后,我们需要做数据库相关的配置工作配置数据库在MauiBoilerplate.Core项目中,添加两个实体类:我们简单的写一个歌曲(song)的实体类其中包含了歌曲标题(MusicTitle),艺术家(Artist),专辑(Album),时长(Duration)以及发售日期(ReleaseDate) public class Song : FullAuditedEntity { .

原创将Abp移植进.NET MAUI项目(一):搭建项目

将Abp移植进.NET MAUI项目(一):搭建项目
去年12月份做了MAUI混合开发框架的调研,想起来文章里给自己挖了个坑,要教大家如何把Abp移植进Maui项目,今天来填坑。熟悉Abp的同学都知道,Abp 是一套强大的应用程序设计时框架(俗称脚手架),新版本的Abp vNext为微服务和网络优化的更多,然而本地开发经典Abp已经够用,而且官方没有停止维护,因此使用这个框架MAUI则是跨平台的应用程序抽象层,强大的运行时框架 + 强大的设计时框架 , 我说这是宇宙最强大跨平台开发框架,不为过吧?😁搭建MAUI项目请注意:本文发布时,MAUI处

原创[.Net 6]写一个简单的文件上传控件后端

[.Net 6]写一个简单的文件上传控件后端
此项目是配合上一篇文章[Vue]写一个简单的文件上传控件_林 小的博客-CSDN博客这个后端是一个FakeApi,目标是调用文件上传获得File对象。的后端程序,使用.Net 6项目框架搭建,开发前请安装Visual Studio 2022Visual Studio 2022 版本 17.1 发行说明 | Microsoft Docs搭建项目框架新建一个.Net 6 项目,选择Asp.Net Core Web Api 模板首先定义文件模型: [Serializable] .

原创[学习笔记].Net5项目打包到Linux系统服务时遇到的坑

[学习笔记].Net5项目打包到Linux系统服务时遇到的坑
如果按照官方文档的步骤手动安装.Net5 会有一个坑:在 Linux 上手动安装 .NET - .NET | Microsoft Docshttps://docs.microsoft.com/zh-cn/dotnet/core/install/linux-scripted-manual在使用systemd打包.Net5服务的时候,无法运行,报错如下图:查询系统日志发现对dotnet访问没有权限,dotnet已设置权限755并且service的配置文件中User已配置为本人用户奇怪的是作.

原创[学习笔记] Linux 环境下搭建基于Ngnix的反向代理服务

[学习笔记] Linux 环境下搭建基于Ngnix的反向代理服务
数字证书管理服务/SSL 证书之前为了方便同事测试微信小程序,搭建了基于CentOS的预发布环境,.Net5 程序也已经部署好在上面,在公网上可以通过http协议的临时域名(jevonsflash.xxx.net)访问到后台Api。然而小程序的正式线上版本,只可以跟指定的域名进行网络通信,且域名只支持 https,wss通信协议,因此需要配置预发布环境的域名解析,Ngnix,以及证书。首先公司的域名已经备案(例如: www.matoapp.net),目标是通过这个备案的域名用https方式访问后台

原创[MAUI] 在.NET MAUI中结合Vue实现混合开发

[MAUI] 在.NET MAUI中结合Vue实现混合开发
在MAUI微软的官方方案是使用Blazor开发,但是当前市场大多数的Web项目使用Vue,React等技术构建,如果我们没法绕过已经积累的技术,用Blazor重写整个项目并不现实。Vue是当前流行的web框架, 简单来说是一套模板引擎,利用“模板”和“绑定”两大特性实现web页面mvvm模式开发。利用.NET MAUI框架可以将Vue应用嵌入到Web容器中。可以实现跨平台的混合开发。例如我在某医疗行业项目中,已经用这个混合开发的方式生成应用,Vue代码不需要做什么改动,就能跨平台运行:如果你

原创[MAUI] 混合开发概念

[MAUI] 混合开发概念
混合开发的概念是相对与原生开发来说的:App不直接运行原生程序,而是在原生程序中运行一个Web程序,原生程序中包含Web运行时,用于承载Web页面。暂且将原生应用称之为Web容器,Web容器应该能让JavaScript代码与原生平台的代码交互,互相调用,同时为上层提供交互逻辑,例如导航,事件,Cookie,刷新等内容。之前使用Xamarin可以利用WebView控件做混合开发,但是到目前为止WebView功能还是比较孱弱。用WebView实现混合开发主要是通过重写各个平台的自定义呈现器(Renderer

原创[.Net]使用Soa库+Abp搭建微服务项目框架(三):项目改造

[.Net]使用Soa库+Abp搭建微服务项目框架(三):项目改造
为什么要独立成服务?以一个健康医疗系统为例, 这个系统包含了用户模块,问卷的发放与填写,图表显示,报表生成与查看,患者管理等功能,传统的架构如下:随着项目规模的增长,在开发过程中会发现如下问题:各模块之间耦合严重,比如:报表模块引用了问卷,用户,随访,患者管理等几乎所有模块,难以维护 间接引用的情况过多,导致项目分层不明确,容易产生引用分歧,难以维护目前做的就是解耦各个模块之间的强关联状态,通过上一章提到的上下文边界划分方式,我们大致可以将系统的架构改造如下:通过调用者和实现者共

原创[.Net]使用Soa库+Abp搭建微服务项目框架(四):动态代理和RPC

[.Net]使用Soa库+Abp搭建微服务项目框架(四):动态代理和RPC
上一章我们完成了小项目的面向服务体系改造,你或许一直在思考一个问题。为什么要将业务独立成微服务?以一个健康医疗系统为例, 这个系统包含了用户模块,问卷的发放与填写,图表显示,报表生成与查看,患者管理等功能,传统的架构如下:随着项目规模的增长,在开发过程中会发现如下问题:各模块之间耦合严重,比如:报表模块引用了问卷,用户,随访,患者管理等几乎所有模块,难以维护 间接引用的情况过多,导致项目分层不明确,容易产生引用分歧,难以维护目前做的就是解耦各个模块之间的强关联状态,通过第一章提到的上下文

原创[.Net]使用Soa库+Abp搭建微服务项目框架(二):面向服务体系的介绍

[.Net]使用Soa库+Abp搭建微服务项目框架(二):面向服务体系的介绍
上一章我们建立了一个典型的面向领域设计的Abp小项目,如果按照常规的开发方式,会遇到什么问题呢?先来完善一下这个小项目,在定义好各实体类后,运行Miguration并向数据库里写入一些初始数据。现在整个项目的依赖引用图如下,每一个都有独立的引用路线,互不干涉。简略图如下假设现在有一个需求,MainService业务需要用到Service1和Service2 中的数据,如何操作?在使用Abp框架时,传统开发方式是先建立领域层服务,应用层中调用领域层服务(Manager)并返回给UI

原创[.Net]使用Soa库+Abp搭建微服务项目框架(一):Abp与DDD相关知识回顾

[.Net]使用Soa库+Abp搭建微服务项目框架(一):Abp与DDD相关知识回顾
在企业中大型项目中,随着业务的不断拓展,项目发展到一定程度,需要寻求项目的各模块解耦,独立成为微服务。如何实现呢?首先我们先来简单回顾一下Abp框架怎样实现(DDD)领域驱动设计的,Abp框架的全称是:Asp.Net Boilerplate Project(即Asp.Net 的样板项目),我们知道在领域驱动设计中,我们可以将整个系统分为四个大的层次,每一个层次都有其特定的功能,所以整个项目整体结构是非常清楚的。Eric Evans在《领域驱动设计-软件核心复杂性应对之道》这本书中提出了传统的四层架构

原创[.Net]使用ABP 数据库迁移migration遇到的坑及解决方案

[.Net]使用ABP 数据库迁移migration遇到的坑及解决方案
-> 问题:在使用Update-Database时,突然出现“数据库中已存在名为 'XXX' 的对象”。检查发现__EFMigrationsHistory表中的MigrationId与项目中的EntityFrameworkCore项目中的Migrations内容有不同的地方。ABP的更新机制是对比数据库的id与Migrations各文件Id,如果数据库缺少则往下继续执行,但如果有id冲突,则会认为产生分支,从第一个开始执行了。结果造成读到的全部是CREATE TABLE 的操作,从而产生冲突。解决