草庐IT

dotnet 6 推荐一个可代替 .NET Remoting 的 IPC 库

本文将来和大家推荐一个基于最友好MIT协议的完全在GitHub上开源的,可代替.NETRemoting的IPC本机多进程通讯库本机内多进程通讯IPC不同于跨设备系统的RPC通讯方式,大多数的IPC通讯都需要处理复杂的用户端环境问题。对于RPC通讯来说,大部分时候,服务端都在开发者完全管控的环境下运行。但IPC通讯则无论是服务端还是客户端都可能是在用户端运行的。然而用户端上,无论是系统还是其他环境都是十分复杂的,特别是在国内的,魔改的系统,凶狠的杀毒软件,这些都会让IPC通讯受到非预期的打断传统的dotnet系的IPC手段有很多个,提供给开发使用的顶层框架也有很多,如.NETRemoting和W

dotnet 6 为什么网络请求不跟随系统网络代理变化而动态切换代理

本文记录在dotnet6的网络和在.NETFramework的行为的变更。在dotnet6下,默认的网络请求在系统网络代理变更的时候,是不会动态切换代理的。例如在应用运行进行网络通讯之后,打开Fiddler抓包,此时将会发现Fiddler抓不到包,只有在应用重启之后才能抓到。或者是开着Fiddler抓包,然后退出Fiddler之后应用就断网了如此行为是因为Fiddler抓包其中的一个原理就是设置系统的本机网络代理,而由于dotnet6下,应用不会动态切换代理,如果在应用启动进行网络通讯之后,再打开Fiddler抓包,在Fiddler打开之后,将会修改系统的本机网络代理,但是dotnet6的应用

dotnet 6 为什么网络请求不跟随系统网络代理变化而动态切换代理

本文记录在dotnet6的网络和在.NETFramework的行为的变更。在dotnet6下,默认的网络请求在系统网络代理变更的时候,是不会动态切换代理的。例如在应用运行进行网络通讯之后,打开Fiddler抓包,此时将会发现Fiddler抓不到包,只有在应用重启之后才能抓到。或者是开着Fiddler抓包,然后退出Fiddler之后应用就断网了如此行为是因为Fiddler抓包其中的一个原理就是设置系统的本机网络代理,而由于dotnet6下,应用不会动态切换代理,如果在应用启动进行网络通讯之后,再打开Fiddler抓包,在Fiddler打开之后,将会修改系统的本机网络代理,但是dotnet6的应用

dotnet 为大型应用接入 ApplicationStartupManager 启动流程框架

对于大型的应用软件,特别是客户端应用软件,应用启动过程中,需要执行大量的逻辑,包括各个模块的初始化和注册等等逻辑。大型应用软件的启动过程都是非常复杂的,而客户端应用软件是对应用的启动性能有所要求的,不同于服务端的应用软件。设想,用户双击了桌面图标,然而等待几分钟,应用才启动完毕,那用户下一步会不会就是点击卸载了。为了权衡大型应用软件在启动过程,既需要执行复杂的启动逻辑,又需要关注启动性能,为此过程造一个框架是一个完全合理的事情。我所在的团队为启动过程造的库,就是本文将要和大家介绍我所在团队开源的dotnetCampus.ApplicationStartupManager启动流程框架的库背景这个

dotnet 为大型应用接入 ApplicationStartupManager 启动流程框架

对于大型的应用软件,特别是客户端应用软件,应用启动过程中,需要执行大量的逻辑,包括各个模块的初始化和注册等等逻辑。大型应用软件的启动过程都是非常复杂的,而客户端应用软件是对应用的启动性能有所要求的,不同于服务端的应用软件。设想,用户双击了桌面图标,然而等待几分钟,应用才启动完毕,那用户下一步会不会就是点击卸载了。为了权衡大型应用软件在启动过程,既需要执行复杂的启动逻辑,又需要关注启动性能,为此过程造一个框架是一个完全合理的事情。我所在的团队为启动过程造的库,就是本文将要和大家介绍我所在团队开源的dotnetCampus.ApplicationStartupManager启动流程框架的库背景这个

dotnet 谨慎在静态构造函数里使用锁

在dotnet的最佳实践里面,不推荐在静态构造函数里面包含复杂的逻辑,其中也就包含了本文聊的和多线程相关的锁的使用。最佳做法是尽量不要在静态构造函数里面碰到任何和锁以及多线程安全相关的逻辑。本文来告诉大家,在静态构造函数里面使用锁将带来的问题以及原因在.NET的设计里面,一个类型的静态构造函数,是在此类型第一次被碰到时将会被CLR调用。调用的时候,只允许一个线程执行进入静态构造函数,换句话说是一个类型的静态构造函数不会重复被多个线程执行,只会被执行一次。如此即可保证静态构造函数的安全性不同于实例构造函数,实例构造函数大部分由代码里面的new关键词触发,执行代码的仅有一个线程。如果多个线程调用n

dotnet 谨慎在静态构造函数里使用锁

在dotnet的最佳实践里面,不推荐在静态构造函数里面包含复杂的逻辑,其中也就包含了本文聊的和多线程相关的锁的使用。最佳做法是尽量不要在静态构造函数里面碰到任何和锁以及多线程安全相关的逻辑。本文来告诉大家,在静态构造函数里面使用锁将带来的问题以及原因在.NET的设计里面,一个类型的静态构造函数,是在此类型第一次被碰到时将会被CLR调用。调用的时候,只允许一个线程执行进入静态构造函数,换句话说是一个类型的静态构造函数不会重复被多个线程执行,只会被执行一次。如此即可保证静态构造函数的安全性不同于实例构造函数,实例构造函数大部分由代码里面的new关键词触发,执行代码的仅有一个线程。如果多个线程调用n

WPF dotnet 6 开启 PM v2 的 DPI 感知 导致触摸线程访问 UI 属性抛异常

本文记录一个WPF在dotnet6的一个已知问题,且此问题我已修复提交给官方仓库。这是一个只有在dotnet6框架下,非dotnet5也非.NETCore3.1也非.NETFramework的问题,要求开启DPI感觉等级为PerMonitorV2的特性,在带触摸屏上的应用,应用运行过程中,切换屏幕的DPI之后,触摸过程有概率触发在触摸线程访问UI的依赖属性,在触摸线程抛出异常炸掉应用条件必须同时满足以下条件:dotnet6:dotnet6.0.1及以上版本dotnet5和.NETCore3.1和.NETFramework没有此问题,这是新改出来的,细节请参阅原理部分应用开启PerMonitor

WPF dotnet 6 开启 PM v2 的 DPI 感知 导致触摸线程访问 UI 属性抛异常

本文记录一个WPF在dotnet6的一个已知问题,且此问题我已修复提交给官方仓库。这是一个只有在dotnet6框架下,非dotnet5也非.NETCore3.1也非.NETFramework的问题,要求开启DPI感觉等级为PerMonitorV2的特性,在带触摸屏上的应用,应用运行过程中,切换屏幕的DPI之后,触摸过程有概率触发在触摸线程访问UI的依赖属性,在触摸线程抛出异常炸掉应用条件必须同时满足以下条件:dotnet6:dotnet6.0.1及以上版本dotnet5和.NETCore3.1和.NETFramework没有此问题,这是新改出来的,细节请参阅原理部分应用开启PerMonitor

dotnet 6 修复在 System.Text.Json 使用 source generation 源代码生成提示 SYSLIB1032 错误

在dotnet6内置了通过源代码生成的方式进行序列化JSON对象,性能非常高。使用的时候需要将Json序列化工具类换成dotnet运行时自带的System.Text.Json进行序列化,再加上一个继承JsonSerializerContext的辅助类型,且在此类型标记JsonSerializableAttribute特性,将此类型传入序列化和反序列化即可完成对接。然而在使用的过程中,如果发现此辅助类型的实际代码没有生成,且输出提示SYSLIB1032警告,那可能就是此辅助类型没有写对导致如官方文档的对SYSLIB1032的描述,这是由于标记了JsonSerializableAttribute的