林德熙 - 微软最具价值专家和 .NET 基金会成员
本文来安利大家一个我做的好用的工具,这个工具可以更新某个文件夹下所有 Git 仓库,通过调用命令行的 Git 命令实现更新。这是一个 dotnet tool 工具,所有代码在 GitHub 完全开源
在哪可以找到 dotnet 官方权威的图标?正统的 .NET 图标是哪个? 本文来回答大家这几个问题
我们的项目中会包含有很多文件,但是可能我们没有注意到的,我们的文件的编码不一定是 UTF-8 编码,这就可能让构建出来的应用程序在别人电脑运行时出现乱码,或者别人拉下来代码,却发现代码里面的中文都是乱码。为了解决文件编码的问题,咱需要一个编码规范工具,本文将告诉大家在 GitHub 上仓库,可以利用 GitHub 的 Action 部署自动代码文件编码规范的机器人,这个机器人可以自动协助咱规范文件的编码规范。可以设置为每次上传代码的时候,自动帮忙设置文件编码为 UTF-8 编码。或者在每次代码合并到主分支之后,机器人将会尝试修复文件的编码,如存在文件需要修复的,那机器人将会创建一个代码审查
在咱项目里面,大家是否有关注过文件的编码,一个文件是作为 Ascii 编码保存的,还是作为 GBK 编码保存的,还是 UTF8 编码保存的?不同的编码是否对应用有影响?其实是会有影响的,在 C# 里面的字符串常量等都会受到文件编码的影响。例如我的应用主输出是 UTF8 编码,此时我在二进制可执行文件里面保存的输出字符串的二进制是采用 GBK 编码的内容,在一些用户的设备上也许就会显示出乱码 本文来安利大家一个 dotnet 工具,这个工具可以用来协助大家找到项目里面的编码不规范文件
本文来安利大家一个超强的库,这个库可以让你的 C# 代码利用上 GPU 显卡的性能,进行一些并行计算。这个库是基于 DirectX12GameEngine 的 ComputeSharp 库。在这个库里面将会动态生成 HLSL 代码,使用着色器的方式在 GPU 上跑起来
在 dotnet 里面,可以使用 Interlocked 进行原子命令更改 int 等的值,利用这个特性可以在一个固定足够长长度的数组里面,让多线程无锁等待写入值。因为没有锁的存在,无法保证读取时的安全,因此这样的集合只能被设计为只写的集合,只有在业务上完成了所有的写之后,才能作为可读的集合取出来
在使用 dotnet 构建的时候提示 error : SourceRoot items must include at least one top-level (not nested) item when DeterministicSourcePaths is true 构建失败
大家在使用多线程的时候,是否有关注过线程安全的问题。如果咱的代码在使用多线程时,在相同的时间有多个线程同时执行相同的方法,此时也许就存在数据安全的问题,如多个线程之间对相同的内存进行同时的读取和修改。而让方法在多线程调用中,相同的时间会被多个线程同时执行某段代码逻辑的技术称为方法重入调用技术,而禁止方法被同时调用也就是禁止方法重入调用。在 dotnet 里面有多个方式可以做到禁止方法重入调用,本文将告诉大家如何做到禁止方法重入调用
在很多大团队开发的时候,将需要用到很多项目的组合开发一个软件,一个软件需要用到的项目有很多个,很少会用到一个项目就能做到。但多个项目一起开发,在配置管理和团队管理有不同的策略,一个就是让项目拆分为多个代码仓库,另一个就是将这些项目合在一个代码仓库。两个策略不能说哪个更好,本文和大家分享我所在的团队和我参与的其他团队的策略
我在安装 dotnet tool 工具时发现所有的工具都安装失败,全部都提示 Could not find a part of the path 安装失败。我重新安装了 dotnet SDK 也没有用,更新到了3.1.402 版本也没有修复
在将原本的 dotnet framework 版本的 WPF 项目迁到 dotnet core 版本,在进行单元测试,发现在 XmlSerializer 抛出了 System.Private.CoreLib.XmlSerializers.dll 找不到的异常,其实这个只是在 XmlSerializer 的内部异常,可以忽略
在本机相同进程中创建生产者消费者队列,可以解决很多线程安全以及高性能需求问题。本文告诉大家如何通过在 GitHub 完全开源的 AsyncWorkerCollection 库的 AsyncQueue 类创建在内存中的高性能低资源占用的生产者消费者队列
在使用 SmartSql 中的 SQL 语句是支持进行属性替换,在调试时如何拿到实际执行的 SQL 命令
本文将告诉大家在 SmartSql 的 SQL 语句的属性前缀 ParameterPrefix 的默认值和用法以及原理
我在写一个文件下载库,这个下载库利用断点续传机制,支持多线程下载一个文件。但是文件写入只能支持单线程,我不想让网络下载需要等待磁盘写入,因此我需要先在内存做缓存,然后让磁盘写入。配合 DirectX 渲染的设计方法,采用双缓存数据结构设计,也就是有两个集合,其中一个集合用来被其他模块写入,另一个集合用来作为当前使用。此时能做到网络下载使用的集合和文件写入的集合不是相同的一个集合,因此两部分的速度差异将不会相互影响
我在一台设备上安装了 UOS 系统,但是我如何在我的主开发设备上和 UOS 系统传输文件?通过 dotnet tool 工具可以完成大部分的工作,当然,使用 dotnet tool 不仅做文件传输,还能做很多特别强大的应用。本文就使用文件传输作为例子告诉大家如何使用 dotnet tool 在多个平台里面使用相同的一套技术和命令行作为工具
我想要在 UOS 上支持上古的图片格式,也就是差不多废弃了 20 年的 EMF 和 WMF 增强图形格式,这两个格式十分古老,而在 Windows 下也存在一些不兼容的图片。我在 Windows 下是使用 GDI+ 的方法支持的,可以将 EMF 转 PNG 或 jpg 等格式。而在 UOS 下,因为 GDI+ 是跨平台的,可以使用跨平台的 System.Drawing.Common 库进行转换
在使用 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 开源的 runtime 运行时仓库里面,有微软的大佬说运行时仓库的代码应该减少使用 Linq 语句,那这又是为什么呢
如果一个项目想要让其他某个指定的项目可以使用到 internal 的类或成员,可以通过标记 InternalsVisibleToAttribute 的方式实现
本文告诉大家在 dotnet 里的 AutoResetEvent 锁的用法
本文来安利大家宇辰大大的 .NET Core 用 Blazor 做 jmeter 系列视频
本文告诉大家一个逗比方法可以用来删除程序自身
在 Windows 下,想要获取指定进程或所有进程的命令行参数,此时需要一些工具的辅助。本文安利大家一个好用的 dotnet 工具,用于获取 Win32 进程的命令行参数
在发布 CBB 作为 NuGet 包的时候,我期望开发者在使用我的库进行调试,可以自动链接代码到对应打包的 GitHub 上的代码,可以从本地拿到对应的源代码进行调试。这样的调试方式对于开源项目来说,将会很方便
在创建一个 TaskCompletionSource 期望让等待的逻辑只会被调用一次,而调用的是多线程,可以使用 TrySetResult 方法,这个方法是线程安全,只会让 TaskCompletionSource 被调用一次
在使用 SemaphoreSlim 这个锁,能做到的是指定让任务执行几次,同时提供异步方法,减少线程占用。但异步的方法如果没有用对,会因为异步状态机的引用,而存在内存泄露
在我的博客里面会添加很多引用,但是有一大部分的链接失修,访问的时候访问不到了,或者需要更新。于是我写了一个工具,可以协助找到所有的已失败的链接
默认在 dotnet 里面框架提供了 Microsoft.Extensions.Logging 可以和依赖注入做日志框架,而有些业务,如需要自己定制日志行为,此时就需要定制日志
默认在列表以及字典哈希这些都会先看对象是否有自己实现的等于判断,如果有就调用对象的。因此对象可以做到两个不同的对象返回相等。而如果需要判断对象引用相等,也就是只有相同的对象才返回相等,此时需要用到 ReferenceEquals 方法。这个判断方法是最快的判断相等的方法,只有在传入的两个参数是相同的对象的时候才会返回 true 的值
我在给 dotnet 的 runtime 仓库提PR时,小伙伴告诉我可以使用 TryAdd 方法减少判断,但是我修改这个代码发现 100 个自动化测试都失败了,都告诉我没有找到这个方法
在使用 dotnet 的时候,有时候会期望某个类多添加一个属性,但是这个类可能是放在引用库里面不能直接修改,或者添加一个属性会影响这个类的设计。那么有没有方法和 WPF 一样支持给任意对象附加任意的属性?本文告诉大家一个好用的库,用来给任意的对象附加任意的属性
本文告诉大家在一个连续的 commit 树中统计两个 commit 之间的差异的 commit 数量,也就是存在 A commit 存在而 B commit 不存在的 commit 的数量
在分析 DUMP 进行自动化调试的时候,很多时候只能通过 WinDbg 和命令行调用的方式,这样的方式很难做到灵活。同时编写各个命令行的难度也特别高,这在需要对命令行的输出进行不同的分支的判断时候,难度会更大。于是找到了 Microsoft.Diagnostics.Runtime 库,这个库提供了简单的方式,可以在 C# 里面用代码写分析 DUMP 的代码
在 OpenXML SDK 里面对于很多值,如字符串等的值,都包含一个 HasValue 属性。刚入门的小伙伴会认为这就是一个和可空类型一样的属性,表示这个属性是不是为空。其实这句话只是对一半,其实这个属性表示的是在重新定义的字符串参数里面的属性是否为空