Visual C++使用UTF-8编码

Visual C++工程中的代码文件默认使用ANSI编码,这样容易导致以下问题:

  1. 在其他语言的环境中编辑、生成工程时可能会出现乱码,因为ANSI的具体编码取决于系统设置;
  2. 在引用第三方库(通常是UTF-8格式)的头文件时,不能正确解析文件中的非ASCII字符。

要在Visual C++的工程中使用UTF-8编码,需要实现两个目标:

  1. 让Visual Studio以UTF-8编码保存代码文件;
  2. 让编译器以UTF-8编码编译代码文件。
继续阅读“Visual C++使用UTF-8编码”

.NET类库打包如何加入XML文档

.NET类库在打包为NuGet包的时候,如果需要加入XML文档,则需要在生成时启用XML文档文件的输出。生成时输出的XML文档文件在打包时会自动被包含在NuGet包中,无需另行将其包含到项目中。

要在生成时输出XML文档文件,只需在项目文件(.csproj)中的<PropertyGroup>节点内插入如下内容即可:

<GenerateDocumentationFile>true</GenerateDocumentationFile>

.NET中SortedDictionary、SortedList和SortedSet

.NET Core / .NET Standard标准库中,命名空间System.Collections.Generic中,一些类是通过包System.Collections分发的。本文分析了该包中不那么基础又有点令人混淆的SortedDictionarySortedListSortedSet这三个类,并对有些相似的SortedListSortedSet进行了一些性能对比。

System.Collections包的源代码位于https://github.com/dotnet/runtime/tree/master/src/libraries/System.Collections

继续阅读“.NET中SortedDictionary、SortedList和SortedSet”

Windows 10如何ping计算机名之mDNS

mDNS(参见RFC 6762)是一种用于本地主机名查询的方式,通过组播地址224.0.0.251(或ff02::fb)上的UDP端口5353运行。当需要解析.local结尾的主机名时,应当通过mDNS协议进行解析。mDNS的工作方式与普通DNS类似,但其不依赖一个单独的DNS服务器,而是依靠计算机名的拥有者自行回应该mDNS的请求。Windows 10可以通过mDNS的方式获取被ping的计算机名的IP地址。

继续阅读“Windows 10如何ping计算机名之mDNS”

解决GitLab CI中文乱码问题

在中文版Windows操作系统上使用GitLab CI Runner的时候,如果命令行的输出包含中文,则在GitLab中看到的流水线(Pipeline)日志会出现乱码情况。为了解决这个问题,可以在Runner的初始化脚本中插入语句“chcp 65001”,将命令行输出编码设为UTF-8,之后GitLab的流水线日志就能正常显示MSBuild的中文输出了。

继续阅读“解决GitLab CI中文乱码问题”

在Ubuntu上编译多架构Docker镜像

Docker能够在包括ARM64、Power PC等很多不同架构的处理器平台上运行。然而,有些处理器平台上不容易找到可用于构建容器镜像的设备。例如,常见的能够运行Docker的ARM设备包括Raspberry Pi、NAS等,它们通常拥有较小的内存和性能普通的处理器,不太能够胜任构建容器镜像的任务。通过Docker的实验性功能Docker Buildx以及多平台仿真软件QEMU,可以实现在x64平台的Ubuntu操作系统中为多种架构构建Docker镜像。

继续阅读“在Ubuntu上编译多架构Docker镜像”