.NET Core 简介
微软于2016年推出了新一代的开发平台,并且将其命名为. Ce。相较于旧的. Framewk。 . Ce有如下优点: 1). Ce采用模块化开发。不再像. Framewk那样需要安装整个安装包。. Ce核心只包含很少的文件,所有其他模块都需要单独安装。根据需要引用各自不动的版本和包。 (2). Ce支持独立部署,也就是说,可以把. Ce运行时环境和开发的程序打包到一起部署。这样就不需要在服务器上安装. Ce运行环境,只要把程序复制到服务器上,程序就能运行,这对容器化、无服务器(Serverless)
.NET C#程序启动闪退,在安装或者程序文件下能正常运行,但通过路径却无法运行
. C#程序启动闪退,目录导致的问题 这是第2次踩这个坑了,很小的编程细节,容易忽略,所以写个博客,分享给大家。 1.第一次坑:是windows 系统把程序运行成服务,找不到配置文件,原因是以服务运行它的工作目录是在C:\Windows\System32 2.本次坑:WPF桌面程序通过注册表设置开机自启,开机启动就闪退 我的排查流程: 1.使用注册表中配置的绝对路径,直接进入该文件夹中双击运行,验证程序和路径正确性,结果:失败。但管理员却能运行。原因是inno setup打包的时候设置了需要管理员运行。于
WPF实现html中的table控件
前言相信很多做WPF开发的小伙伴都遇到过表格类的需求,虽然现有的Grid控件也能实现,但是使用起来的体验感并不好,比如要实现一个Excel中的表格效果,估计你能想到的第一个方法就是套Bder控件,用这种方法你需要控制每个Bder的边框,并且在一堆Bdr中找到Grid.Row,Grid.Column来确定位置,明明很简单的一个功能,硬是耗费了大量时间。Grid的这种设计虽然功能很强大,但是同时也导致了操作繁琐可读性非常差的问题。此时做过web开发的人肯定很想念html中的table元素,没错,我也是这样想的
权限管理系统--系统权限篇(源码)
一、前言随着网络的发展,企业对于信息系统数据的保密工作愈发重视,不同身份、角色对于数据的访问权限都应该大相径庭。列如1、不同登录人员对一个数据列表的可见度是不一样的,如数据列、数据行、数据按钮等都可能不太一样。2、表单的灵活设计及呈现。3、流程的灵活设计及呈现。4、接口的调用信息者及性能监控。5、等等。对于以上等功能,如果要做出一套完整且灵活的权限管理系统,实属不易。而接下来作者要介绍的“OverallAuth”权限管理系统,可以说是最全面和最好用的权限管理系统。说明:这篇文章作者会把完成“Overall
记一次 .NET某半导体CIM系统 崩溃分析
一:背景 1. 讲故事 前些天有一位朋友在公众号上找到我,说他们的WinFm程序部署在20多台机器上,只有两台机器上的程序会出现崩溃的情况,自己找了好久也没分析出来,让我帮忙看下怎么回事,就喜欢这些有点调试基础的,dump也不需要我指导怎么去抓,接下来我们就上windbg开始分析吧。 二:WinDbg分析 1. 为什么会崩溃 寻找崩溃的表象比较简单,使用 windbg 的 !analyze v 命令即可。0:000 !analyze v ... EXCEPTION_RECD: (.exr 1) Exce
掌握C#中异步魔法:同步方法如何优雅调用异步方法
概述:上述C#示例演示了如何在同步方法中调用异步方法。通过使用`async`和`await`关键字,实现了同步方法对异步方法的调用。建议使用`await`而不是`Result`来避免潜在的死锁问题。这种模式在处理异步任务时能够提高代码的可读性和性能。 在C#中,从同步方法调用异步方法的过程涉及到使用异步编程的关键字和模式,主要涉及async和await关键字。以下是一个简单的例子,展示如何在同步方法中调用异步方法: using System using System.Threading.Tasksclas
WPF绑定之道:为何选择属性而非字段,提升灵活性与可控性
概述:WPF支持绑定到对象的属性而不是字段,主要因为属性提供了更多控制和扩展性。属性包含get和set方法,支持数据验证和通知属性更改,而字段通常被认为是内部实现。使用属性使WPF能够更灵活、可控地与数据交互,提高代码的可读性和可维护性。 WPF(Windows Presentation Foundation)支持绑定到对象的属性而不是字段的主要原因之一是属性提供了更多的控制和扩展性。属性具有get和set方法,允许在获取和设置值时执行额外的逻辑,例如数据验证、通知属性更改等。字段通常被认为是内部实现的一
在 .NET 中使用 OPC UA 协议
目录什么是 OPC UAUaExpert 的使用下载 UaExpert首次启动添加 OPC UA 服务器连接 OPC UA 服务器查看 PLC 数据使用 C# 读写 OPC UA 数据连接到 OPC UA 服务器获取节点的值写入节点的值 什么是 OPC UA OPC UA(OPC Unified Architecture,开放平台通信统一架构)是 OPC 基金会应用在自动化技术的机器对机器网络传输协定。OPC UA 不依赖于特定的操作系统或平台,可以在 Windows、Mac、Linux 等多种系统上运行
dotNet符号文件(pdb),符号包(snupkg)和SourceLink
前言 本文的主题是 Visual Studio 调试 NuGet 包以及符号包的概念,如何去发布一个 NuGet 包,让我们的 NuGet 包支持 SouceLink,这些都是我们开发中比较容易忽视的内容,但是熟悉了以后可以让我们在调试中得心应手,也是开源项目开发的基础篇。demo 源代码在文末pdb 符号文件程序数据库 (.pdb) 文件(也称为符号文件)将项目源代码中的标识符和语句映射到已编译应用中的相应标识符和说明。 这些映射文件将调试器链接到源代码,以进行调试。在 Visual Studio 调试
.NET Emit 入门教程:第四部分:构建类型(Type)
前言: 在动态生成代码的过程中,构建类型(Type)是至关重要的一步。 通过使用 Emit 中的 TypeBuilder,我们可以定义和创建各种类型,包括类、结构体和接口。 本节将深入探讨如何使用 TypeBuilder 动态构建类型,并介绍其在实际应用中的重要性。 定义公用代码,生成程序集以供对照: 通过学习本系列之前的文章,我们可以轻松定义 AssemblyBuilder 程序集构建器,再通过程序集构建器,定义 ModuleBuilder 模块构建器。 下面我们先通过定义公用代码来生成程序集,以便更好
一个操作让数组处理速度快了5倍,到底是为什么
概述:通过对数组进行排序,代码更好地利用了缓存,从而提高了程序的性能。这种现象通常被称为"缓存友好"(cachefriendly)或"空间局部性"(spatial locality) 今天做一个数组数据计算时,发现一个效率问题,给大家分享一下 一个数组排序和不排序时同样的逻辑处理速度是不一样的。排序后速度快了近5倍,上图: 再来说明原因:这段代码之所以在排序后运行更快,是因为它利用了现代计算机体系结构中的一个优化:CPU缓存。 在主循环中,对data数组的访问是顺序的,即按照数组元素的顺序依次访问。在没有
浅谈WPF之MVVM工具包
在之前的WPF示例中,都会用到一个MVVM框,也是一个比较常的MVVM框架,就是MVVM工具包【CommunityToolkit.Mvvm】,今天专门以一个简单的小例子,简述一下MVVM工具包的常见用法,仅供学习分享使用,如有不足之处,还请指正。 什么是MVVM工具包? CommunityToolkit.Mvvm 包(又名 MVVM 工具包)是一个现代、快速和模块化的 MVVM 库。 MVVM工具包是 . 社区工具包的一部分,围绕以下原则生成:独立于平台和运行时 . Stard 2.0、. Sta
[C#] .NET8增加了Arm架构的多寄存器的查表函数(VectorTableLookup/VectorTableLookupExtension)
作者: zyl910 发现.8增加了Arm架构的多寄存器的查表函数(VectTableLookupVectTableLookupExtension),这给编写SIMD向量化算法带来了方便。 一、指令说明 在学习Arm的AdvSimd(Neon)指令集时,发现它的Lookup(查表)功能,类似X86的Sse系列指令集中的字节Shuffle(换位。如 _mm_shuffle_epi8 )功能。 而且Arm的Lookup不仅支持单个向量的查表,且支持多个向量的查表。具体来说,是2~4个向量。 单个向量查表(如
.NET分布式Orleans
Grain 是 leans 框架中的基本单元,代表了应用程序中的一个实体或者一个计算单元。 每个Silo都是一个独立的进程,Silo负责加载、管理和执行Grain实例,并处理来自客户端的请求以及与其他Silo之间的通信。 通信原理 在相同的Silo中,Grain与Grain之间的通信通过直接的方法调用实现。每个Silo都维护了一个Grain的运行时环境,当一个Grain需要调用另一个Grain时,它可以直接调用目标Grain的方法,无需经过网络传输,示意图如下所示:在不同的Silo中,Grain与Grai
C# 数据流 FileStream
Stream MS HelpManual: https:learn.microsoft.comzhcndotapisystem.io.streamview=8.0 FileStream 官方手册: https:learn.microsoft.comzhcndotapisystem.io.filestreamview=8.0 StreamWriter: https:learn.microsoft.comzhcndotapisystem.io.streamwriterview=8.0 StreamRea
gRPC入门学习之旅(三)
gRPC入门学习之旅(一) gRPC入门学习之旅(二) 2.3、创建自定义服务 除上面的模板中自带的一个gRPC服务之后,我们再创建一个自己的服务,我将创建一个用户信息gRPC服务,主要功能有三个,登录、获取用户信息、修改用户信息。创建UserInfo.proto协议文件在“解决方案资源管理器”中,使用鼠标左键选中“Protos”文件夹,然后在菜单栏上,依次选择“添加新建项”。如下图。 在“添加新项”对话框中,选择“ASP. Ce常规”节点,然后选择“协议缓冲区文件”项。 在“名称”文本框中,输入
WinAppSDK / WinUI3 项目无法使用 SystemEvents 的问题
SystemEvents 是一个开发 win32 窗口项目很常用的类,其中封装了一些常用的系统广播消息。在 WinUI3 项目中,SystemEvents 事件经常无法触发,简单排查了一下原因。 SystemEvent 内封装了一个线程和一个窗口,通过窗口消息在内部线程上调用事件,内部使用了 SystemEventInvokeInfo 对象来保存委托,RaiseEvent 方法遍历调用保存的 SystemEventInvokeInfo.Invoke 方法来触发事件。 public SystemEventI
.NET Emit 入门教程:第三部分:构建模块(Module)
前言: 在这一部分中,我们将深入讨论动态程序集中模块的概念以及如何构建和管理模块。 1、模块的概念: 模块是动态程序集中的基本单位,它类似于一个独立的代码单元,可以包含类型、方法、字段等成员。 在动态程序集中,模块扮演着组织代码和实现代码复用的关键角色。 它们允许开发人员将相关功能和数据组织在一起,并在需要时进行引用和重用。 一个程序集可以包含一个或多个模块,这种模块化的设计有助于提高代码的可维护性和可扩展性。 通俗的讲人话:即在设计上:在运行时,一个程序集可以包含多个模块,每个模块允许用不同的语言编写,
Orleans
在当今数字化时代,构建高效、可靠的分布式系统是许多企业和开发团队面临的挑战。微软的 leans 框架为解决这些挑战提供了一个强大而简单的解决方案。本文将介绍 leans 的核心概念,并通过一个简单的示例代码来演示其用法。 什么是 leans? leans 是由微软开发的一个开源分布式应用框架,它基于 Act 模型,采用了一种称为 "Virtual Act" 的概念。 在 leans 中,应用程序被分解为多个独立的 Act 实体,每个 Act 都有自己的状态和行为,能够独立地处理消息和计算。 什么是Ac
前端优化 之 preload
为了优化我们公司网站的性能,我最近引入了浏览器预加载技术(Preload)。 这项技术可以显著减少级联情况,提高资源加载的并行度,从而加速网站的加载速度。 Preload的原理 Preload的原理是在浏览器解析HTML文档时,提前加载页面所需的关键资源,如样式表、脚本文件和字体等。 通过预加载这些关键资源,浏览器能够在页面加载时更快地获取所需资源,从而加速页面的渲染过程。下面是一个简单的预加载示例代码:!DOCTYPE html html lang="en" headmeta set="UTF8"met
在 PostgreSQL 中,解决图片二进制数据,由于bytea_output参数问题导致显示不正常的问题。
在 PostgreSQL 中,bytea_output 参数控制在查询结果中 bytea 类型的显示格式。默认情况下,bytea_output 的值为 hex,这意味着在查询结果中,bytea 类型的数据以十六进制格式显示。但是,如果你的应用程序期望以二进制格式获取图像数据,则将 bytea_output 设置为 escape 可能更适合。无论 bytea_output 参数设置为 hex 还是 escape,你都可以通过 C# 访问 PostgreSQL 数据库,并且正常获取并显示图片。本篇随笔介绍这个
记一次 .NET某游戏后端API服务 CPU爆高分析
一:背景 1. 讲故事 前几天有位朋友找到我,说他们的API服务程序跑着跑着CPU满了降不下去,让我帮忙看下怎么回事,现在貌似民间只有我一个人专注dump分析,还是申明一下我dump分析是免费的,如果想学习.高级调试的分析技术,可以来我的训练营看看,话不多说,dump分析走起! 二:WinDbg分析 1. CPU 真的爆高吗 昨天录了一个小视频,大意就是作为分析师,不要过分的相信客户说的话,他们往往会把你带偏,你要有自己的分析思路和前进方向,所以需要以数据说话,首先用 !tp 观察下线程池。0:030 !
.Net MinimalApis响应返回值
前言 文本主要讲 MinimalApis 中的使用自定义IResultModel和系统自带IResult做响应返回值。 MinimalApis支持以下类型的返回值:string 这包括 Taskstring 和 ValueTaskstringT(任何其他类型) 这包括 TaskT 和 ValueTaskT基于 IResult 这包括 TaskIResult 和 ValueTaskIResult 本文的完整源代码在文末string 返回值行为 ContentType框架将字符串直接写入响应。 textp
重新记录一下ArcGisEngine安装的过程
前言 好久不用Arcgis,突然发现想用时,有点不会安装了,所以这里记录一下安装过程。 下载Arcgis 首先,下载一个arcgis版本,我这里下的是10.1。 推荐【 gis思维(公众号)】,【麻辣GIS(网站)】。 当然了,这都是很旧很旧的版本了,基本上没有三维功能。 一定要下载带注册机的。arcgis的压缩包包含3个部分,arcgis安装程序,arcgis license证书,注册机。 安装Arcgis Engine 先安装证书。 安装完用注册机生成注册码。然后创建一个service.txt文件,一
.NET Emit 入门教程:第二部分:构建动态程序集(追加构建静态程序集教程)
前言: 在本部分中,我们将深入探讨如何使用C# Emit 来创建动态程序集。 动态程序集是在运行时生成的,为我们提供了一种灵活、动态地构建和加载程序集的能力。 1. 程序集的概念 程序集是.中的基本部署单位,它包含了可执行代码、资源、元数据等信息,是.应用程序的基本组成单元之一。 与静态程序集(即程序集持久化)不同,动态程序集是在运行时生成的,使得我们可以根据需要动态地构建和加载程序集。 动态程序集的重要性体现在多个方面,包括但不限于模块化、版本控制、代码复用等。 通过动态程序集,我们可以更好地管理和组织
Advanced .Net Debugging 5:基本调试任务(线程的操作、代码审查、CLR内部的命令、诊断命令和崩溃转储文件)
一、介绍 这是我的《Advanced . Debugging》这个系列的第五篇文章。今天这篇文章的标题虽然叫做“基本调试任务”,但是这章的内容还是挺多的。上一篇我们了解了一些调. 框架中必要的概念,比如:内存转储、值类型转储、引用类型转储、数组转储和异常转储等,我们既能做到知其然,又能做到眼见为实,知其所以然,对我们分析. 程序有很大的帮助。今天这篇文章主要涉及的内容是线程的操作、代码的审查和诊断命令等。SOSEX扩展的内容我就省略了,因为我这个系列的是基于 . 8 版本来写的,SOSEX是基于 .
IceRPC之快速开始HelloWorld
作者引言. 8.0 下的新RPC很高兴啊,我们来到了第一篇,程序员的HelloWld快速开始RPC之游快速入门 演示如何在几分钟内使用IceRPC构建和运行一个完整的客户端服务器(CS)应用程序. 必要条件: 只要电脑安装 . 8 SDK 就行了. 来吧开始你的RPC之旅 接下来我们要一起构建一个简单的网络应用程序包括如下:服务端: 一个叫 greeter 服务的服务器 客户端: 与服务器建立连接并注册greeter服务之后调用服务greet方法客户端与服务器都是使用普通的控制台应用程序没有Asp.没有依
Newtonsoft.Json/Json.NET忽略序列化时的意外错误
在.中Newtonsoft.Json(Json.)是我们常用来进行Json序列化与反序列化的库。 而在使用中常会遇到反序列化Json时,遇到不规则的Json数据解构而抛出异常。 Newtonsoft.Json 支持序列化和反序列化过程中的错误处理。 允许您捕获错误并选择是处理它并继续序列化,还是让错误冒泡并抛出到您的应用程序中。 错误处理是通过两种方法定义的: JsonSerializerSettings 上的ErrEvent和OnErrAttribute。 ErrEvent 下面是个ErrEvent的例
C#整数除法探析:性能提升与精度平衡的设计之道
概述:C#中整数除法返回整数,维护与低级语言兼容性,提高性能。虽然精度有损,但可通过显式浮点数转换实现小数保留。 在C#中,整数除法返回整数而不是浮点数,这是为了保持与低级语言(如C和C++)的兼容性,同时提高性能和降低复杂性。这种设计使得整数之间的除法操作更加高效,但可能导致精度丧失。 基础功能: 整数除法的基础功能是将两个整数相除,结果是取整数部分。 using Systemclass Program {static void Main(){int dividend = 7int divis = 3
C# 12 拦截器 Interceptors
拦截器Intercepts是一种可以在编译时以声明方式替换原有应用的方法。 这种替换是通过让Intercepts声明它拦截的调用的源位置来实现的。 您可以使用拦截器作为源生成器的一部分进行修改,而不是向现有源编译添加代码。 演示 使用 . 8 创建一个控制台应用程序。并在PropertyGroup中添加以下配置.。需要将其中WebApplication6替换为自己的命名空间。InterceptsPreviewNamespaces$(InterceptsPreviewNamespaces)WebAppl