摘要:
属性 程序集特性 .NET Core 2.1之前程序集特性存储在AssemblyInfo 文件中,2.1开始程序集特性移到MSBuild属性中 | 属性 | Property | 要禁用的属性 | | | | | | AssemblyCompanyAttribute | Company | Gene
阅读全文
posted @ 2020-11-07 17:07
.Neterr
阅读(109)
推荐(0)
摘要:
IFileProvider File Providers是文件系统之上的一层抽象。它的主要接口是IFileProvider,IFileProvider对象为我们构建了一个具有层次化目录结构的文件系统。由于IFileProvider是一个接口,所以由它构建的是一个抽象化的文件系统,这里所谓的目录和文件
阅读全文
posted @ 2020-11-07 12:52
.Neterr
阅读(725)
推荐(0)
摘要:
先看效果: string js = @"var a=1 alert(a);//注释1 alert(a);/*注释2*/"; string result = PackBus.PackJavascript(js).Replace("\n", "\r\n"); result: eval(function(
阅读全文
posted @ 2020-11-02 14:32
.Neterr
阅读(322)
推荐(0)
摘要:
默认情况下,生成项目时会把Views的视图文件编译成dll*.Views.dll 同时我们也看不到Views文件夹,如果有频繁修改视图内容的需求,这样就很不方便 我们可以将视图预编译改为运行时编译 1、添加Nuget: <PackageReference Include="Microsoft.Asp
阅读全文
posted @ 2020-11-02 13:20
.Neterr
阅读(343)
推荐(0)
摘要:
源代码的动态编译问题,我们知道这个可以利用Roslyn来解决。 实现一个编译助手类,它的Compile方法将会对参数sourceCode提供的源代码进行编译。该方法返回源代码动态编译生成的程序集,它的第二个参数代表引用的程序集。 添加Nuget包: <PackageReference Include
阅读全文
posted @ 2020-10-30 16:24
.Neterr
阅读(2092)
推荐(1)
摘要:
WebMarkupMin可以做什么: 运行时最小化html、css、js(去除空格、注释...) 对HTTP启用压缩(GZip、Deflate、Brotli..) 使用步骤: 添加Nuget包: <PackageReference Include="WebMarkupMin.AspNet.Brotl
阅读全文
posted @ 2020-10-29 13:56
.Neterr
阅读(588)
推荐(1)
摘要:
一、前言 源码 1、最近一直在看项目性能优化方式,俗话说的好项目优化第一步那当然是添加缓存,我们的项目之所以卡的和鬼一样,要么就是你的代码循环查询数据库(这个之前在我们的项目中经常出现,现在慢慢在修正)或者代码做了很多不该做的事情。这个时候就可以引入我们的缓存了。(只要你的代码不是写的特别差,比如之
阅读全文
posted @ 2020-10-28 16:28
.Neterr
阅读(288)
推荐(0)
摘要:
今天在工作上遇到这么个需求:需要获取对象上所有属性的值,但并事先并不知道对象的类型。 我的第一反应就是使用反射,但是这个操作会进行多次,大量的反射肯定会有性能影响。虽然对我这个项目无关紧要,但我还是选择了另外一种解决方案:构建表达式树,再生成委托,然后将委托缓存在字典里。代码如下: 首先构建表达式树
阅读全文
posted @ 2020-10-25 17:14
.Neterr
阅读(324)
推荐(0)
摘要:
介绍 ContractResolver能做什么: 为属性添加一些序列化设置 自定义属性名 有选择的序列化属性 CamelCasePropertyNamesContractResolver Newtonsoft提供了CamelCasePropertyNamesContractResolver,继承自C
阅读全文
posted @ 2020-10-25 11:34
.Neterr
阅读(4288)
推荐(3)
摘要:
通常的序列化与反序列化中的json结构与c#中的类模型结构是相对应的,我们是否可以在序列化一个对象时候,让我们json的数据结构能按照自己的意愿,而不必与该对象的数据结构一样呢?,比如说,一个对象,只有一个名为"ID"的int类型的属性,值为1,如果序列化该对象,则能得到json:{"ID":1},
阅读全文
posted @ 2020-10-23 23:57
.Neterr
阅读(8441)
推荐(0)
摘要:
一、JSON使用JsonPropertyAttribute重命名属性名 [JsonProperty("name")] 二、JSON使用JsonPropertyAttribute序列化升序排序属性 [JsonProperty(Order=4)] 三、反序列化属性时,Required指定属性性质 指定其
阅读全文
posted @ 2020-10-23 22:50
.Neterr
阅读(2219)
推荐(0)
摘要:
序列化设置的几种方式: 全局序列化:(在之后使用JsonConvert进行序列化时都有效) JsonConvert.DefaultSettings = new Func<JsonSerializerSettings>(() => { Newtonsoft.Json.JsonSerializerSet
阅读全文
posted @ 2020-10-22 22:43
.Neterr
阅读(454)
推荐(0)
摘要:
Task(任务) 任务是 MSBuild 真正要执行的东西,例如编译、打包和下载文件等等任务,可以由我们自行用 C# 或者 VB.NET 等语言实现。 关于任务的编写,我们将在以后进行介绍,这里只简单介绍一下任务的使用。 MSBuild 也内置了很多任务,例如 Message 用来打印信息、Warn
阅读全文
posted @ 2020-10-17 17:48
.Neterr
阅读(510)
推荐(0)
摘要:
MSBuild MSBuild是在.NET 2.0中引入的针对Visual Studio的构建系统。它可以执行构建脚本,完成各种Task——最主要的是把.NET项目编译成可执行文件或者DLL。从技术角度来说,制作EXE或者DLL的重要工作是由编译器(csc,vbc等等)完成的。MSBuild会从内部
阅读全文
posted @ 2020-10-17 16:16
.Neterr
阅读(1183)
推荐(1)
摘要:
IContainer是通过ContainerBuilder.Build()方法创建的,由于Autofac有限制,Build()方法只能调用一次,所以我们不能直接通过Build()创建IContainer。 Autofac提供了以下方式可以获取Icontainer: public class Glob
阅读全文
posted @ 2020-10-14 15:00
.Neterr
阅读(1303)
推荐(0)
摘要:
如果publish、Subscribe所用的Message不是同一类型如何处理? 替换组件ITypeNameSerializer 1、下面这个类是从Easynetq源码中拷出来的,主要包含两个方法Serialize、Deserialize 由于这两个方法不是虚方法,所以不能重写,我们把源码拷出来,把
阅读全文
posted @ 2020-10-14 13:34
.Neterr
阅读(1147)
推荐(0)
摘要:
AsnyncLocal与ThreadLocal都是存储线程上下文的变量,但是,在实际使用过程中两者又有区别主要的表现在: AsyncLocal变量可以在父子线程中传递,创建子线程时父线程会将自己的AsyncLocal类型的上下文变量赋值到子线程中,但是,当子线程改变线程上下文中AsnycLocal变
阅读全文
posted @ 2020-10-10 16:18
.Neterr
阅读(532)
推荐(0)
摘要:
#介绍: Dapper.Common是基于Dapper的Lambda扩展,遵循Linq语法规则,上手快,支持Mysql,Sqlserver(目前只实现了这两个数据,实现其他数据库也很轻松),支持单表,多表,自定义函数等功能。 开源地址:https://github.com/1448376744/Da
阅读全文
posted @ 2020-09-26 22:03
.Neterr
阅读(523)
推荐(0)
摘要:
API 版本控制可以采用不同的方式进行控制: (1)在 URL 中追加版本或作为查询字符串参数, (2)通过自定义标头和通过接受标头 在这篇文章中, 让我们来看看如何支持多个版本的 ASP.NET Core Web API。 一、创建asp.net core webapi 项目,引用NuGet包:I
阅读全文
posted @ 2020-09-25 18:16
.Neterr
阅读(455)
推荐(0)
摘要:
Pod介绍: 自主式Pod:不被控制器管理的Pod,一旦死亡不能重启 控制器管理的Pod Pod的生命周期: Pause容器: 当一个Pod被创建,Pause是第一个启动的容器,负责网络和数据卷初始化,我们不能操作 每个Pod中有一个容器pause,其他容器共用这个容器的网络和存储卷,所以Pod中的
阅读全文
posted @ 2020-09-19 15:35
.Neterr
阅读(183)
推荐(0)
摘要:
创建容器默认使用docker0网络,我们创建一个自定义网络 docker0的特点是容器之间只能通过ip访问,不能通过容器名访问,除非使用--link。自定义网络可以通过容器名访问 单向通信 --link 网络模式 bridge:使用桥接方式连接网络(默认) none:不配置网络 host:和主机共享
阅读全文
posted @ 2020-09-18 15:09
.Neterr
阅读(190)
推荐(0)
摘要:
mysqldump 介绍 mysqldump 是 MySQL 自带的逻辑备份工具。 它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert 语句,当我们需要还原这些数据时,只要执行这些 insert 语句,即可将对应的数据还原。 选项 实例
阅读全文
posted @ 2020-09-18 14:38
.Neterr
阅读(191)
推荐(0)
摘要:
介绍 INFORMATION_SCHEMA提供了访问数据库元数据的方式。 元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。 有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。 操作: 删除mysql数据库某一张主键表的所有外键关系 SELECT CONCAT('a
阅读全文
posted @ 2020-09-18 13:56
.Neterr
阅读(187)
推荐(0)
摘要:
如果你的任务是需要基于日历每天定时运行,那你就应该使用计划任务触发器,例如每周五中午12:00执行任务,或者每天早上9点执行任务。 Cron表达式: 计划任务表达式是一个字符串,它又7个子字符串组合而成,这7个子字符串有空格符间隔,分别表示计划任务触发时间的7个部分 第一位 – 触发时间的秒数 第二
阅读全文
posted @ 2020-09-18 10:22
.Neterr
阅读(445)
推荐(0)
摘要:
触发器分为:简单触发器(Simple Trigger)、触发器(Cron Trigger),一个触发器只能绑定一个任务 通用触发器属性: JobKey – 当前触发器绑定任务的唯一标识符 StartTimeUtc – 触发器的生效开始时间 EndTimeUtc – 触发器的生效结束时间 触发器优先级
阅读全文
posted @ 2020-09-17 21:02
.Neterr
阅读(607)
推荐(0)
摘要:
用于将Type和Type名称相互转化 public class TypeNameSerializer { private readonly ConcurrentDictionary<Type, string> serializedTypes = new ConcurrentDictionary<Ty
阅读全文
posted @ 2020-09-16 18:50
.Neterr
阅读(228)
推荐(0)
摘要:
Demo1、可以当做缓存的key使用 当需要一组参数的值作为缓存key,通常会使用如下方式: string keyName = arg1+"_"+arg2+"_"+arg3; 此时可以使用struct作为缓存key,只要struct所有属性相同,就会被认为是相同值。不再需要自己拼接缓存key str
阅读全文
posted @ 2020-09-16 17:03
.Neterr
阅读(286)
推荐(0)
摘要:
String类型 Api (1).StringSet:写入数据,如果数据已经存在,则覆盖;可以一次性存入1个key-value,也可以一次性存入多个Key-value集合,并且可以设置其过期时间。 (2).StringGet:读取数据,可以一次性读取一个key的value,也可以一次性读取多个key
阅读全文
posted @ 2020-09-14 13:36
.Neterr
阅读(715)
推荐(0)
摘要:
简介 在ASP.NET 4.X中,我们通常使用 log4net, NLog 等来记录日志,但是当我们引用的一些第三方类库使用不同的日志框架时,就比较混乱了。而在 ASP.Net Core 中内置了日志系统,并提供了一个统一的日志接口,ASP.Net Core 系统以及其它第三方类库等都使用这个日志接
阅读全文
posted @ 2020-09-12 16:58
.Neterr
阅读(840)
推荐(0)
摘要:
Quartz.net: 定时执行框架,几乎可以执行所有触发器类型的定时任务,非常灵活。 基本概念: IScheduler:任务调度器,相当于一个大的容器。调度器通常在应用程序启动时创建,一个应用程序实例通常只需要一个调度器即可。 IJob:工作 Trigger:触发器,job和trigger的关系是
阅读全文
posted @ 2020-09-10 18:55
.Neterr
阅读(349)
推荐(0)
摘要:
# 连接对象ConnectionMultiplexer `ConnectionMultiplexer`是`StackExchange.Redis`的核心对象,`ConnectionMultiplexer` 应被多个调用之间共享使用。不需要为每个操作创建一个 `ConnectionMultiplexe
阅读全文
posted @ 2020-09-09 16:08
.Neterr
阅读(2731)
推荐(0)
摘要:
Assert做什么? Assert基于代码的返回值、对象的最终状态、事件是否发生等情况来评估测试的结果。Assert的结果可能是Pass或者Fail。如果所有的asserts都pass了,那么整个测试就pass了;如果有任何assert fail了,那么测试就fail了。 xUnit提供了以下类型的
阅读全文
posted @ 2020-09-08 18:15
.Neterr
阅读(229)
推荐(0)
摘要:
步骤: 创建Xunit测试项目 运行测试项目后,菜单栏会出现“测试”,测试-窗口-测试资源管理器 进入测试资源管理器后,点击全部运行即可 测试方法属性标签: Fact: [Fact]用于无参测试方法 [Fact] public void FailingTest() { Assert.Equal(5,
阅读全文
posted @ 2020-09-08 17:05
.Neterr
阅读(387)
推荐(0)
摘要:
简介 Async/Await在.Net Core中真的是无处不在,到处都是异步操作,那为什么要用?有什么作用?别人说能提升性能? async/await可以让我们写出和同步代码一样简洁的异步代码 这里从理论,实践,原理一个个解开这些疑问。 语法 async关键字必须在返回类型之前,async修饰的方
阅读全文
posted @ 2020-09-08 10:48
.Neterr
阅读(380)
推荐(0)
摘要:
1.为什么要保证顺序 消息队列中的若干消息如果是对同一个数据进行操作,这些操作具有前后的关系,必须要按前后的顺序执行,否则就会造成数据异常。举例: 比如通过mysql binlog进行两个数据库的数据同步,由于对数据库的数据操作是具有顺序性的,如果操作顺序搞反,就会造成不可估量的错误。比如数据库对一
阅读全文
posted @ 2020-09-07 11:12
.Neterr
阅读(440)
推荐(0)
摘要:
EasyNetQ是一个由小组件组成的库。当你写如下代码: var bus = RabbitHutch.CreateBus("host=localhost"); 静态方法CreateBus通过IoC容器组装这些组件,CreateBus的一个重载允许你访问组件注册,这样您就可以提供您自己版本的EasyN
阅读全文
posted @ 2020-09-06 17:25
.Neterr
阅读(276)
推荐(0)
摘要:
EasyNetQ的使命是为基于RabbitMQ的消息传递提供最简单的API。 核心IBus接口有意避免公开AMQP概念,如交换,绑定和队列,而是实现基于消息类型的默认交换绑定队列拓扑。 对于某些场景,能够配置您自己的exchange绑定队列拓扑是很有用的;高级EasyNetQ API允许您这样做。高
阅读全文
posted @ 2020-09-06 17:10
.Neterr
阅读(919)
推荐(0)
摘要:
随着SOA、微服务、CQRS的盛行,EventBus越来越流行,上GitHub搜了一下,还是有蛮多的这类实现,老牌的有NServiceBus(收费)、MassTransit,最近的有CAP(国人写的,1.4k个Star,非常不错)、ReBus(张队长在NanoFabric中推荐的)、RawRabbi
阅读全文
posted @ 2020-09-06 17:03
.Neterr
阅读(232)
推荐(0)
摘要:
Request/Response模式 介绍 EasyNetQ也支持Request/Response这种方式的消息模式。适合在client/Server应用中执行,客户端发送一个请求到服务器,服务器然后处理请求后返回一个响应。和传统的RPC机制不同,EasyNetQ request/response操
阅读全文
posted @ 2020-09-05 23:17
.Neterr
阅读(808)
推荐(0)
摘要:
介绍 EasyNetQ支持的最简单的消息模式是发布/订阅.这个模式是一个极好的方法用来解耦消息提供者和消费者。消息发布者只要简单的对世界说“这里有些事发生” 。它不关心有没有人监听,或者接收者是谁,或者接收者在那里。我们能够添加和移除特定类型的消息的订阅者,不需发布者做任何的重新配置。 假如你开始去
阅读全文
posted @ 2020-09-05 22:41
.Neterr
阅读(1268)
推荐(1)