lindexi

林德熙 - 微软最具价值专家和 .NET 基金会成员

林德熙

dotnet tool 文件编码规范命令行工具

在咱项目里面,大家是否有关注过文件的编码,一个文件是作为 Ascii 编码保存的,还是作为 GBK 编码保存的,还是 UTF8 编码保存的?不同的编码是否对应用有影响?其实是会有影响的,在 C# 里面的字符串常量等都会受到文件编码的影响。例如我的应用主输出是 UTF8 编码,此时我在二进制可执行文件里面保存的输出字符串的二进制是采用 GBK 编码的内容,在一些用户的设备上也许就会显示出乱码 本文来安利大家一个 dotnet 工具,这个工具可以用来协助大家找到项目里面的编码不规范文件

dotnet 基于 dotnet format 的 GitHub Action 自动代码格式化机器人

是不是大家也会觉得代码审查里面审查代码格式化问题是无意义的,但是不审查又觉得过不去?是否有个专门的工具人,用来协助修复代码格式化的问题?本文来安利大家一个特别好用的方法,使用 dotnet 完全开源的专业格式化工具 dotnet format 配合 GitHub 的自动构建 Action 做的自动代码格式化机器人,这个机器人可以被指定到特定时机,如每天晚上或者每次代码合并等,进行代码格式化,格式化完成之后,可以选择直接推送或者提代码审查

dotnet 让 C# 可以通过动态生成 HLSL 使用 DX12 的 GPU 并行计算库 ComputeSharp 的简介

本文来安利大家一个超强的库,这个库可以让你的 C# 代码利用上 GPU 显卡的性能,进行一些并行计算。这个库是基于 DirectX12GameEngine 的 ComputeSharp 库。在这个库里面将会动态生成 HLSL 代码,使用着色器的方式在 GPU 上跑起来

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 版本也没有修复

asp dotnet core 记一次应用拒绝响应调试 开启线程等待同步用光线程池

我有一个上古的库,我使用这个库用来上报日志,而刚才日志服务挂了。然后我就发现了我的应用拒绝响应了,通过 VisualStudio 断点调试可以发现线程池的线程全部被占用了。因为没有可用线程因此所有对 asp dotnet core 应用的访问全部都不会收到响应,为什么我的另一个应用日志服务挂了会让我的业务应用拒绝响应?为什么我的业务应用会使用线程池所有的线程,为什么线程池的所有线程被占用将会让应用拒绝响应

dotnet 双缓存数据结构设计 下载库的文件写入缓存框架

我在写一个文件下载库,这个下载库利用断点续传机制,支持多线程下载一个文件。但是文件写入只能支持单线程,我不想让网络下载需要等待磁盘写入,因此我需要先在内存做缓存,然后让磁盘写入。配合 DirectX 渲染的设计方法,采用双缓存数据结构设计,也就是有两个集合,其中一个集合用来被其他模块写入,另一个集合用来作为当前使用。此时能做到网络下载使用的集合和文件写入的集合不是相同的一个集合,因此两部分的速度差异将不会相互影响

dotnet 在国产 UOS 系统利用 dotnet tool 工具做文件传输

我在一台设备上安装了 UOS 系统,但是我如何在我的主开发设备上和 UOS 系统传输文件?通过 dotnet tool 工具可以完成大部分的工作,当然,使用 dotnet tool 不仅做文件传输,还能做很多特别强大的应用。本文就使用文件传输作为例子告诉大家如何使用 dotnet tool 在多个平台里面使用相同的一套技术和命令行作为工具

dotnet 在 UOS 国产系统上安装 MonoDevelop 开发工具

本文告诉大家如何在 UOS 上安装 MonoDevelop 开发工具。本文使用的 UOS 是 UOS 20 x64 版本,这个系统版本是基于 debian 10 的,默认的 MonoDevelop 开发工具是没有提供 UOS 版本,但是有提供 debian 10 版本

dotnet 在 UOS 国产系统上使用 MonoDevelop 进行拖控件开发 GTK 应用

先从一个 Hello World 应用开始,试试和古老的 WinForms 一样的拖控件式开发

dotnet 在 UOS 国产系统上使用 MonoDevelop 创建 GTK 全平台带界面应用

本文告诉大家如何在 UOS 国产系统上开始使用 MonoDevelop 开发,通过创建 GTK# 应用,进入界面开发的第一步

dotnet 执行 docker 容器 error MSB4018 CreateAppHost 任务意外失败可能原因

在使用 ASP.NET Core 的 docker 调试的时候,在生成的这一步提示 C:\Program Files\dotnet\sdk\3.1.201\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets(424,5): error MSB4018: “CreateAppHost”任务意外失败 可能的原因是 docker 内之前的容器没有关闭

dotnet 在 UOS 国产系统上安装 Mono 开发工具的方法

本文使用的 UOS 是 UOS 20 x64 版本,这个系统版本是基于 debian 10 的。而默认 mono-devel 是没有提供 UOS 版本,但是有提供 debian 10 版本,而 mono-devel 有很多依赖包,因此手动安装不是很靠谱

dotnet OpenXML 解析 PPT 文本字体获取详解

在 OpenXML 的 PPT 的文本的字体是一个比较复杂的概念,即使在 OpenXML SDK 的辅助下,也需要自己写很多的逻辑。通过 ECMA 376 文档里面散落在各地的描述,和 dotnetCampus.OfficeDocumentZipper 工具的实验帮助之下,我摸到了本文将要告诉大家的规则,以及逻辑的实现

asp dotnet core 提供大文件下载的测试

本文仅仅是提供测试使用的代码

dotnet OpenXML 简单聊聊 PPT 文本解析

在 Office 里面的文本解析最全的范围是 Word 文本,就是属性数量本身就特别多。本文只是简单和大家聊聊 Office 里面的 PPT 的文本的解析入门。尽管 PPT 的文本也是采用 DrawingDL 的文本属性为主,不过会用到的属性将比 Word 少很多。本文将和小伙伴介绍 PPT 的文本存放的方式

Office 文档 文本排版布局 中华人民共和国国家标准 标点符号用法

我在做一个和 Office 差很多的文本排版软件,而文本排版软件里面的是有国家标准的,如果不符合标准那么这个排版软件是不专业的,或者说这个软件只是一个纯文本软件,而不是一个能做文档的软件

C# 8.0 文件长度 Bytes 字节转 KB 等单位字符串

本文将使用 C# 8.0 写一个相对比较省内存和性能不差的将文件长度从 Bytes 转换为单位使用 KB 或 MB 或 GB 等单位的字符串的方法

dotnet OpenXML 的 spcPct 和 spcPts 表示距离的不同

在 OpenXML 里面的文本排版里面使用到 spcPct (Spacing Percent) 和 spcPts(Spacing Points)两个不同的单位用来表示段前空白和段后空白以及行间距

dotnet 通过依赖注入的 Scoped 给工作流注入相同的上下文信息

本文将来聊聊 Microsoft.Extensions.DependencyInjection 这个依赖注入框架的 Scoped 功能的一个应用,这个框架是默认 ASP.NET Core 的核心库将会默认被引用。而其他 .NET 的应用如 WPF 或 Xamarin 等也可以使用这个库。因此本文标题就是 dotnet 而不是具体哪个框架 在开发的时候,咱会有一些复杂的逻辑需要多个类合作进行执行,而在使用多个类进行执行的时候,就涉及到上下文信息的传递。例如最简单的追踪 Id 的值,假定在多个类组成的多个步骤里面,因为存在多线程调用的问题,咱在定位问题的时候需要在日志里面输出当前步骤所使用的追踪 Id 是哪个,这样就运行进行并行多次任务同时执行,同时日志不会乱

C# dotnet 使用 FileStream 随机文件读写

本文说的随机文件读写的随机的反义词是顺序,这里的随机文件读写对应顺序文件读写。表示文件可以不按照顺序进行读写

dotnet OpenXML 解析 PPT 页面元素文档格式

本文告诉大家在 OpenXML 里面的 PPT 页面 Slide 的元素文档格式

dotnet 找到博客中引用已失败的链接地址

在我的博客里面会添加很多引用,但是有一大部分的链接失修,访问的时候访问不到了,或者需要更新。于是我写了一个工具,可以协助找到所有的已失败的链接

C# dotnet 解决 Path 获取文件名路径在 Windows 构建在 Linux 执行问题

最近需要支持国产的 UOS 系统,这个系统我采用了 Xamarin 加上 GTK 开发,而我的日志系统有一个功能是记录日志的时候传入当前的文件路径,此时 NuGet 包是在 Windows 下构建的,因此传入的路径是 Window 构建服务器路径。此时在 Linux 上尝试获取文件名就炸了

C# dotnet Thread.GetCurrentProcessorId 和 CurrentProcess.Id 的区别

使用 Thread.GetCurrentProcessorId 可以获取当前线程处理器的 Id 是哪个,而通过 Process.GetCurrentProcess().Id 可以获取当前进程的 Id 号,这两个的差别从上面描述就能看出

Blazor 获取当前的 Url 链接

在 Blazor 获取当前页面所在的 URL 链接可以通过 NavigationManager 类辅助获取,也可以通过此方法获取当前域名等信息

Blazor 的 NavLink 的 NavLinkMatch.Prefix 有啥作用

默认的 NavLink 的 Match 的默认值就是 NavLinkMatch.Prefix 表示只要当前的链接的路由的前部分和 href 的相同,那么将匹配上,修改样式为高亮

Blazor 的 NavLink 提示 RZ9986 不支持复杂内容

在使用 Blazor 做动态的跳转的时候,如果在 NavLink 的 href 添加了包含 C# 代码,那么将会提示 RZ9986 组件的属性不支持复杂的内容,如混合 C# 代码和标记等。解决方法是通过按钮加上事件代替

Blazor 如何使用代码跳转链接

可以通过在页面注入 NavigationManager 调用 NavigateTo 方法进行跳转

ASP.NET Core 解决控制台输出日志内容前面[40m等乱码字符

在默认我写了一个 WPF 程序去做管理 ASP.NET Core 进程的日志的时候,重定向输出的内容里面每一行前面都添加了很多乱码字符串。其实这是 ASP.NET Core 控制台的颜色字符,解决方法是禁用控制台颜色

白板类应用的业务事件分发模式

在画板上延伸业务的事件,可以通过画板本身,利用路由事件分发,此时能解决依赖事件业务对具体业务对象的依赖

C# dotnet 从后向前删除列表元素提升性能的原理

如果要从一个列表里面删除一些元素,如何做才能让性能比较高?答案是从列表的后面开始删起,从后到前删除

C# dotnet 一个看上去还能用的二进制序列化帮助类

这仅是一个辅助方法帮助类,可以协助小伙伴写二进制序列化的效率,代码也还看的过去

C# dotnet 一个还看的过去的 B 树实现

我尝试找到一个 B 树的实现,尽管这个东西十分简单,但是依然网上有很多不同的版本。我在 justcoding121 的版本上魔改了一下,就是本文可以用来给大家的版本

WPF 获取本机所有字体拿到每个字符的宽度和高度

本文主要采用 GlyphTypeface 类尝试获取每个字符的宽度和高度的值,尽管这个方法和最终 WPF 布局使用的文本的宽度和高度是不相同的,但是依然可以作为参考

C# CLR 聊聊对象的内存布局 一个空对象占用多少内存

在 C# 中的对象大概可以分为三个不同的类型,包括值类型、引用类型和其他类型。本文主要讨论的是引用类型对内存空间的占用情况。在讨论开始之前我想问问大家,一个空的对象会占用多少内存空间?当然这个问题本身就有问题,因为没有区分栈空间与堆空间的内存空间。其实小伙伴会发现这不是一个好回答的问题,因为似乎没有一个可以认为标准的标准答案。请让我为你详细聊聊对象的内存布局