![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dotnetcore
文章平均质量分 81
lindexi_gd
我是微软Windows应用开发方向的最具价值专家,欢迎访问我博客blog.lindexi.com里面有大量WPF和UWP博客
展开
-
NewLife 的 RocketMQ 的生产者每次都是新实例将只由一个消费者消费
我写了一点逗比代码,让在每次使用 NewLife 的 RocketMQ 发送消息时,都创建一个新的 Producer 生产者。此时我发现了在我的消费者里面,无论开多少个消费者实例进程,每次都只有一个消费者进行消费本文记录的问题,和 NewLife 的 RocketMQ 库的设计毫无相关,仅仅只是我的逗比问题。还请大家放心使用 NewLife 的 RocketMQ 库我在对 NewLife...原创 2021-06-17 00:39:28 · 1388 阅读 · 1 评论 -
dotnet 使用 TypeNameFormatter 库格式化输出反射泛型类型
默认的反射输出带泛型的类型,都会使用反引号的字符串。使用 TypeNameFormatter 库可以输出贴近代码的输出默认的类型的输出是和代码写的方法不相同,如获取 List<int> 类型的输出Console.WriteLine(typeof(List<int>));// 大概输出是 List`1[System.Int32]而我期望输出的是 List<i...原创 2021-03-26 00:41:14 · 429 阅读 · 0 评论 -
dotnet core 和 dotnet Framework 启动可执行文件的差别
在 Windows 下,使用 .NET Framework 构建出来的应用,可以只有一个可执行文件,在可执行文件里面包含了 IL 代码。使用 .NET Core 构建出来的应用,将会包含一个 Exe 可执行文件,和对应的 Dll 文件,而 IL 代码将放在 Dll 文件里面。那么使用 .NET Framework 和使用 .NET Core 所输出的 Exe 可执行文件有什么差别,本文将从文件格式以及启动过程两个方面给大家聊聊这两个的不同原创 2021-02-01 00:44:49 · 1001 阅读 · 0 评论 -
dotnet tool 自动找到项目里面重复的 NuGet 依赖项
使用新的 SDK 风格的 csproj 的时候,允许 NuGet 包进行依赖传递。意思是如果我 A 项目安装了库 L 那么如果有 B 项目引用 A 项目,那么自动 B 项目也就安装了库 L 而不需要项目 B 再次手动安装。也就是如果此时的 B 项目里面也加上了 L 库的安装,那么这个安装就是多余的。本文安利大家一个工具,可以自动了解有哪些项目的哪些库是多余安装的,通过依赖传递就能安装上,不需要手动安装,可以删除原创 2021-02-04 01:01:35 · 453 阅读 · 6 评论 -
升级到 dotnet core 之后 HandleProcessCorruptedStateExceptions 无法接住异常
这是 dotnet core 的破坏性改动之一,在 dotnet framework 里面,可以使用 HandleProcessCorruptedStateExceptionsAttribute 接住非托管层抛出的异常,如 C++ 异常等。但是这个功能在 dotnet core 下存在行为的变更,从 .NET Core 1.0 开始,损坏进程状态异常无法由托管代码进行处理。 公共语言运行时不会将损坏进程状态异常传递给托管代码原创 2021-01-29 19:29:06 · 1850 阅读 · 0 评论 -
ASP.NET Core 因为 Nginx 配置 Connection 为 Upgrade 导致 Kestrel 返回 400 错误
我今天遇到了一个坑,我的服务器在经过了 Nginx 之后,发送的 POST 请求,如果请求里面有 Body 内容,那么 Kestrel 将会返回 400 错误,同时也不会经过任何的中间件原创 2021-01-29 19:27:24 · 2116 阅读 · 0 评论 -
C# dotnet 编写 curl 的用户名和密码逻辑
在使用 curl 时,可以采用 -u 加上用户名和密码,这个对应在 C# 里面也是两句话的事情。只是在 curl 里面封装好了,我通过工具人协助解决,于是就在这里记录一下原创 2021-01-29 19:23:20 · 676 阅读 · 0 评论 -
dotnet 自动迁移 VS 2017 以前的 csproj 转为 dotnet core 的 SDK Style 风格工具
本文来安利大家一个特别好用的工具,可以自动将 VisualStudio 2017 以前版本创建的 Franken-proj 格式 的 csproj 项目文件转换为 dotnet core 的 SDK Style 风格的csproj 项目文件的工具原创 2021-01-29 19:22:31 · 606 阅读 · 0 评论 -
dotnet OpenXML 修复 Office 文档里面包含格式不正确的 Uri 而无法解析
在使用 OpenXML 解析 Office 文档,无论是 PPT 还是 Word 还是 Excel 文档,都会使用标准方式解析。而此时的文档如果包含了错误的 Url 格式,例如不正确的邮件名的时候,将会在解析的时候出错。本文告诉大家如何修复这个问题尽管在 Office 2016 等版本,是可以在用户端制作出格式不正确的 Url 文档,如下图所示的内容此时在执行解析的时候,将会提示如下代...原创 2021-01-05 00:43:55 · 1117 阅读 · 0 评论 -
WPF 制作支持点击穿透的高性能的透明背景异形窗口
默认的 WPF 的支持点击穿透的透明背景窗口,是通过 AllowsTransparency 实现的,但是此方法的性能比较低。本文来告诉大家一个高性能的方法,通过此方法制作出来的 WPF 窗口可以获取很高的性能,设置透明和设置窗口不透明之间几乎没有性能差别本文的方法由 少珺 小伙伴提供,我只是代为整理博客。本文的方法是基于 WPF 制作高性能的透明背景异形窗口(使用 WindowChrome ...原创 2021-01-05 00:43:55 · 1627 阅读 · 2 评论 -
dotnet 5 破坏性改动 WPF 和 WinForms 的 OutputType 输出类型重定向为 WinExe 类型
官方团队为了防逗比,默认将 OutputType 输出类型重定向为 WinExe 类型,这样能解决很多新手遇到的 WPF 项目显示出黑框控制台界面问题。而对于一些老司机来说,这个特点反而有点迷,特别是在尝试打开控制台调试的时候在开始之前,先复习一下 OutputType 这个属性的作用,这个属性告诉了 SDK 程序集输出的文件是什么。可以选的值是 Library 类库和 Exe 控制台程序以...原创 2020-12-14 00:39:42 · 835 阅读 · 0 评论 -
dotnet 如何更改应用在任务管理器显示的进程名 AssemblyTitle 的值
我有一个应用,我期望他在任务管理器里面显示为 Doubi 这样大家就知道这是一个逗比进程。但是我更改了程序集名,也就是 exe 文件名都没有什么用,因为在任务管理器里面通过 AssemblyTitle 属性决定显示的进程名。本文来告诉大家如何更改 AssemblyTitle 的值在旧版本的 Franken-proj 格式的 csproj 格式里面,在项目都有一个 Properties\Ass...原创 2020-12-14 00:39:42 · 1521 阅读 · 0 评论 -
dotnet core 应用是如何跑起来的 通过自己写一个 dotnet host 理解运行过程
在上一篇博客是使用官方提供的 AppHost 跑起来整个 dotnet 程序。本文告诉大家在 dotnet 程序运行到托管代码之前,所需要的 Native 部分的逻辑。包括如何寻找 dotnet 运行时,如何加载运行时和框架然后跑起来业务端的 dll 文件的逻辑在上一篇博客告诉大家在 dotnet 的 AppHost 是如何做的,详细请看 dotnet core 应用是如何跑起来的 通过Ap...原创 2020-12-07 00:42:16 · 642 阅读 · 0 评论 -
dotnet 使用 FileAccess 与 OpenOrCreate 对文件访问权限的影响
本文告诉大家在 dotnet 里面,客户端应用,如 WPF 应用对当前应用程序运行用户无写权限的文件进行访问的时候,调用 File.Open 方法的各个参数的影响在 File.Open 方法里面其实就是对 FileStream 创建的封装,在 FileStream 的构造函数有大量的参数,而对文件权限有影响的是 FileMode 和 FileAccess 和 FileShare 三个通过 ...原创 2020-12-07 00:42:16 · 715 阅读 · 0 评论 -
Xamarin iOS 部署应用提示 iOS code signing key 失败
在部署 iOS 应用的时候,如果是拉别人的代码,因为被使用了别人的签名,就会提示 Error: iOS code signing key ‘iPhone Developer: lindexi@icloud.com (F56JH45N57)’ not found in keychain. 部署失败。解决方法是替换为自己的账号原因就是在 csproj 上的 CodesignProvision 属性设置的是别人的签名,可以通过替换为自己的账号解决在 Xamarin 从零开始部署 iOS 上的 Walte原创 2020-12-03 21:20:36 · 1018 阅读 · 0 评论 -
dotnet 让 C# 可以通过动态生成 HLSL 使用 DX12 的 GPU 并行计算库 ComputeSharp 的简介
本文来安利大家一个超强的库,这个库可以让你的 C# 代码利用上 GPU 显卡的性能,进行一些并行计算。这个库是基于 DirectX12GameEngine 的 ComputeSharp 库。在这个库里面将会动态生成 HLSL 代码,使用着色器的方式在 GPU 上跑起来这个 ComputeSharp 库在 GitHub 完全开源,请看 https://github.com/Sergio069...原创 2020-10-13 12:25:24 · 1377 阅读 · 0 评论 -
dotnet 使用 SourceLink 将 NuGet 链接源代码到 GitHub 等仓库
在发布 CBB 作为 NuGet 包的时候,我期望开发者在使用我的库进行调试,可以自动链接代码到对应打包的 GitHub 上的代码,可以从本地拿到对应的源代码进行调试。这样的调试方式对于开源项目来说,将会很方便使用方法很简单,通过 SourceLink 就能做到。这个 SourceLink 是一系列的库,包含了给 Azure Devops 使用的和给 GitHub 使用的,给 Gitlab...原创 2020-10-09 01:50:58 · 924 阅读 · 0 评论 -
dotnet 构建 SourceRoot items must include at least one top-level item 失败
在使用 dotnet 构建的时候提示 error : SourceRoot items must include at least one top-level (not nested) item when DeterministicSourcePaths is true 构建失败我在库里使用了 SourceLink 这个库,用来关联代码,详细请看 dotnet 使用 SourceLink ...原创 2020-10-09 01:50:58 · 611 阅读 · 0 评论 -
NuGet 更新库新版本的缓存问题
我有一个 NuGet 库有新的版本,但是我的服务器速度不够快,此时我第一次使用 NuGet 还原找不到库。在我服务器索引完成之后,再次使用 NuGet 会依然找不到这个库,而此时服务器准备完成。这是 NuGet 的缓存的坑我使用了 BaGet 搭建我私有的 NuGet 服务器,他的速度很快,但是索引一个上传的 NuGet 库依然需要一定的时间。如果在 NuGet 服务器还没准备完成之前调用...原创 2020-10-07 05:06:13 · 943 阅读 · 1 评论 -
dotnet 开发的单代码仓库和多代码仓库的优劣
在很多大团队开发的时候,将需要用到很多项目的组合开发一个软件,一个软件需要用到的项目有很多个,很少会用到一个项目就能做到。但多个项目一起开发,在配置管理和团队管理有不同的策略,一个就是让项目拆分为多个代码仓库,另一个就是将这些项目合在一个代码仓库。两个策略不能说哪个更好,本文和大家分享我所在的团队和我参与的其他团队的策略单代码仓库的优势在于管理方便,将所有的项目都放在一个代码仓库里面,此时...原创 2020-10-06 01:37:55 · 476 阅读 · 0 评论 -
dotnet 进行二进制差分压缩文件
我需要对一个文件做二进制差分压缩,我有一个文件的起始点,在之后的每次更改我都记录文件的二进制的差分,这样就可以通过起始点和差分文件计算修改后的文件。通过二进制差分可以用来提高文件保存磁盘读写速度,也可以减少软件自动更新需要的文件大小在 QQ 和 Chrome 等软件更新就使用这个技术,通过二进制差分方法下载差分文件,然后用差分文件和当前版本计算出新版本,将新版本写入文件。这样做的优势在于每...原创 2020-10-06 01:37:55 · 679 阅读 · 0 评论 -
dotnet OpenXML 元素 cNvPr NonVisual Drawing Properties 重复 id 标识处理
使用 OpenXML 的格式的 Office 文档的元素,使用 p:cNvPr Non-Visual Drawing Properties 的 Id 属性作为标识,在标准协议这个标识是唯一的,但实际很多文档都存在重复的标识。本文告诉大家在使用 Office 2016 版本测试重复 id 的行为在 OpenXML 的元素的标识一个好的设计是使用 uint 作为标识符,这样做的兼容能力更强。因...原创 2020-09-29 00:58:28 · 412 阅读 · 0 评论 -
dotnet OpenXML 元素 cNvPr NonVisual Drawing Properties 的属性作用
本文收集元素属性 cNvPr Non-Visual Drawing Properties 的属性的作用本文的 Non-Visual Drawing Properties 也就是在 OpenXML 文档里面的 cNvPr 代码,在 ECMA 376 的 20.2.2.3 文档有详细说明在形状的 Non-Visual Drawing Properties 使用 p:cNvPr 表示,在图片使...原创 2020-09-29 00:58:28 · 557 阅读 · 0 评论 -
dotnet tool 工具安装提示 Could not find a part of the path 安装失败
我在安装 dotnet tool 工具时发现所有的工具都安装失败,全部都提示 Could not find a part of the path 安装失败。我重新安装了 dotnet SDK 也没有用,更新到了3.1.402 版本也没有修复我在 GitHub 开源了 dotnetcampus.DotNETBuildSDK 项目,请看 https://github.com/dotnet-ca...原创 2020-09-27 01:31:28 · 1492 阅读 · 0 评论 -
C# dotnet 高性能多线程工具 ExecuteOnceAwaiter 只执行一次的任务
本文将安利大家一个好用的工具,用来解决这样的问题,我有一个任务,要求这个任务在执行过程中不能被重入,只有在任务执行完成之后才能重置状态重新执行一次。换句话说就是在此任务正在执行过程中,不能重复进入此任务。同时在任务执行过程中,不能重置任务状态。在任务执行完成之后,可以保存任务的状态,直接返回任务结果。在任务执行完成之后,可以调用重置状态方法,让任务可以再次重新调用本文的这个 Execute...原创 2020-09-27 01:31:28 · 538 阅读 · 0 评论 -
WPF 获取本机所有字体拿到每个字符的宽度和高度
本文主要采用 GlyphTypeface 类尝试获取每个字符的宽度和高度的值,尽管这个方法和最终 WPF 布局使用的文本的宽度和高度是不相同的,但是依然可以作为参考获取系统字体文件夹的文件系统字体文件夹放在 @"C:\Windows\Fonts" 本文不讨论用户的系统盘放在其他盘里面使用 Directory.GetFiles 可以获取所有字体文件 var fileL...原创 2020-09-07 01:00:22 · 1360 阅读 · 0 评论 -
WPF 自己封装 Skia 差量绘制控件
使用 Skia 能做到在多个不同的平台使用相同的一套 API 绘制出相同界面效果的图片,可以将图片绘制到应用程序的渲染显示里面。在 WPF 中最稳的方法就是通过 WriteableBitmap 作为承载绘制。本文告诉大家如何封装一个支持差量绘制的控件,默认的绘制方法都是每次都是不保存上次绘制的内容,而且清空画布,重新绘制。这样的绘制方法显然效率不够高在上一篇博客里面告诉大家如何在 WPF ...原创 2020-09-08 00:52:41 · 544 阅读 · 0 评论 -
dotnet OpenXML 颜色变换
颜色变换是对基础颜色的相关属性的修改。 例如,透明度是与颜色相关的属性。 颜色转换被指定为任何颜色模型标签的子标签,可以在任何颜色加上颜色变换大概的写法如下<a:solidFill> <a:srgbClr val="00B050"> <a:alpha val="51000"/> </a:...原创 2020-09-09 01:31:08 · 761 阅读 · 0 评论 -
dotnet 双缓存数据结构设计 下载库的文件写入缓存框架
我在写一个文件下载库,这个下载库利用断点续传机制,支持多线程下载一个文件。但是文件写入只能支持单线程,我不想让网络下载需要等待磁盘写入,因此我需要先在内存做缓存,然后让磁盘写入。配合 DirectX 渲染的设计方法,采用双缓存数据结构设计,也就是有两个集合,其中一个集合用来被其他模块写入,另一个集合用来作为当前使用。此时能做到网络下载使用的集合和文件写入的集合不是相同的一个集合,因此两部分的速度差...原创 2020-09-22 00:49:28 · 383 阅读 · 0 评论 -
asp dotnet core 记一次应用拒绝响应调试 开启线程等待同步用光线程池
我有一个上古的库,我使用这个库用来上报日志,而刚才日志服务挂了。然后我就发现了我的应用拒绝响应了,通过 VisualStudio 断点调试可以发现线程池的线程全部被占用了。因为没有可用线程因此所有对 asp dotnet core 应用的访问全部都不会收到响应,为什么我的另一个应用日志服务挂了会让我的业务应用拒绝响应?为什么我的业务应用会使用线程池所有的线程,为什么线程池的所有线程被占用将会让应用...原创 2020-09-23 02:27:59 · 453 阅读 · 0 评论 -
dotnet OpenXML SDK 文本占位符解析
在使用 OpenXML SDK 解析 PPT 文档的文本占位符的时候,需要对 PPT 的格式有一定的了解,尽管整个 OpenXML SDK 包括文档等都很详细。但是有一些细节文档上虽然有写,但是没有强调一下,就被我忽略了什么是文本占位符,其实这是在 PPT 添加的概念,在 PPT 里面用户可以编辑模版文件,在这里定义某个占位符文本的样式和坐标等如何制作占位符请看 PPT占位符,居然这么好用...原创 2020-09-23 02:27:59 · 727 阅读 · 0 评论 -
C# dotnet 使用 AsyncEx 库的 AsyncLock 异步锁
本文来安利大家一个好用的库 AsyncEx 库。这个库有一个强大的功能是支持 AsyncLock 异步锁。小伙伴都知道,在 C# 里面的 lock 关键字,在 2020 年也就是 C# 9.0 都没有让这个关键字能支持锁内部添加异步方法。此时在一些需要做异步线程安全的业务就比较坑了,而 AsyncEx 库提供了 AsyncLock 异步锁的功能,可以支持在锁里面使用异步使用之前先安装 Ni...原创 2020-09-23 09:39:44 · 1508 阅读 · 0 评论 -
dotnet core 进行 XML 序列化抛出 XmlSerializers dll 文件找不到
在将原本的 dotnet framework 版本的 WPF 项目迁到 dotnet core 版本,在进行单元测试,发现在 XmlSerializer 抛出了 System.Private.CoreLib.XmlSerializers.dll 找不到的异常,其实这个只是在 XmlSerializer 的内部异常,可以忽略在 dotnet core 下,使用如下代码进行 xml 序列化,其...原创 2020-09-26 00:36:36 · 764 阅读 · 1 评论 -
推荐官方开源 PInvoke 库 包含大量 win32 封装
在调用 win32 库的时候,小伙伴会遇到的问题是不知道对应的 win32 函数应该如何写。或者在网上抄了的代码的实现都有些诡异,想要自己封装发现工作量太大。好消息是官方将 PInvoke 库在 dotnet 基金会完全开源,包含了大量的 Win32 库,如 gdi32.dll 和 kernel32.dll 和 user32.dll 等使用官方的库的优势是什么呢?第一个就是减少从网上复制粘...原创 2020-07-10 00:53:05 · 1417 阅读 · 0 评论 -
dotnet OpenXML 的 spcPct 和 spcPts 表示距离的不同
在 OpenXML 里面的文本排版里面使用到 spcPct (Spacing Percent) 和 spcPts(Spacing Points)两个不同的单位用来表示段前空白和段后空白以及行间距在 Office 的文本排版里面,会在 spcAft (Space After) 段后空白空间以及 spcBef (Space Before) 段前空白空间等使用 spcPct (Spacing P...原创 2020-07-10 00:53:05 · 406 阅读 · 0 评论 -
dotnet OpenXML 为什么资源使用 Relationship 引用
在 OpenXML 文档格式里面,所有的资源以及页面之间的引用等,都是通过 Relationship 的引用,如资源需要通过 GetReferenceRelationship 的方法才能拿到。那为什么要这样设计呢在做 Office 解析,可以看到资源的引用,如图片的引用等,不是应用相对的文件路径,而是使用 r:id="xx" 的方式引用,而实际的引用文件需要在 xx.rel...原创 2020-07-10 00:53:05 · 489 阅读 · 0 评论 -
制作的 dotnet tool 运行失败提示依赖缺失
小伙伴做了一个很好用的 dotnet tool 工具,但是这个工具仅在他的设备上能运行,在我的设备上运行就会退出提示 An assembly specified in the application dependencies manifest (LindexiDoubi.deps.json) was not found 找不到依赖默认选择 dotnet tool 的 NuGet 包是会带上...原创 2020-07-13 01:02:05 · 1072 阅读 · 0 评论 -
使用 IOC 控制反转和 DI 依赖注入的意义
其实我的标题没写对,这个话题我是聊不下去的。 本文只和小伙伴聊聊为什么使用容器注入,优缺点是什么。我通过问问题的方式让小伙伴了解这么做的意义在开始之前我就可以告诉小伙伴使用容器注入的缺点了,尽管这很有争议内存泄漏降低性能那是否 IOC 控制反转意味着一定需要配合 DI 依赖注入?答案是不一定的,还有好多有趣的手段那 DI 依赖注入和容器注入有什么关联?其实容器注入是依赖注入的一...原创 2020-07-13 01:55:09 · 339 阅读 · 0 评论 -
C# 8.0 文件长度 Bytes 字节转 KB 等单位字符串
本文将使用 C# 8.0 写一个相对比较省内存和性能不差的将文件长度从 Bytes 转换为单位使用 KB 或 MB 或 GB 等单位的字符串的方法代码可以复制在你的实际软件中使用 static class FileSizeFormatter { public static string FormatSize(long bytes, string format...原创 2020-07-13 01:55:09 · 925 阅读 · 0 评论 -
dotnet ConcurrentDictionary 的 GetOrAdd 性能比 TryGetValue 加 TryAdd 低
我在 Office 的 Open-XML-SDK 库里面找到有代码线程不安全,代码里面使用了 TryGetValue 加 TryAdd 的方法添加对象,而线程安全的方法是通过 GetOrAdd 方法。不过在小伙伴的评论我找到了 GetOrAdd 性能其实在有闭包的时候不如使用 TryGetValue 加 TryAdd 调用这两个方法,但是 GetOrAdd 的优势在于能做到只创建一次对象在...原创 2020-07-17 03:12:15 · 943 阅读 · 1 评论