取消

电脑总是意外从睡眠状态唤醒,可以找出原因然后解决

在昏暗的夜晚,一个人躺在房间的床上,静静的思考着什么。突然间电脑屏幕亮了!什么鬼!到底是谁唤醒了我的电脑!!! 本文将介绍如何寻找唤醒电脑的真凶。 调查是谁唤醒了电脑 使用命令查看上一次是谁唤醒了电脑。 powercfg -lastwake 从图中可知上一次唤醒我计算机的是 英特尔® 以太网连接 I219-V 82186。 查看还有谁可以唤醒电脑 使用命令查看所有...

将友盟(cnzz)站点的访问数据报告分享给其他人

友盟(cnzz)可以帮助我们分析站点的访问数据。不过如果有更多的决策者,则需要更多人可以访问到友盟的数据。 本文介绍两种将自己站点的访问数据报告分享给其他人的方法。 首先,你必须有一个友盟产品的账号,如果还没有,去 注册吧! 使用查看密码分享 设置 进入 站点列表 页面。 点击网站右侧的“设置”。 然后进入查看密码标签,开启查看密码服务,然后输入查看密码。 这...

全局或为单独的项目添加自定义的 NuGet 源

本文介绍如何添加自定义的 NuGet 源。包括全局所有项目生效的 NuGet 源和仅在某些特定项目中生效的 NuGet 源。 你可以前往 我收集的各种公有 NuGet 源 以发现更多的 NuGet 源,然后使用本文的方法添加到你自己的配置中。 使用命令行添加 在使用命令行之前,你需要先在 https://www.nuget.org/downloads 下载最新的 nuget.e...

使用 Visual Studio 调试多进程的程序

当你的编写的是一个多进程的程序的时候,调试起来可能会比较困难,因为 Visual Studio 默认只会把你当前设置的启动项目的启动调试。 本文将介绍几种用 Visual Studio 调试多进程程序的方法,然后给出每种方法的适用条件和优劣。 Visual Studio 多启动项目(推荐) 在 Visual Studio 的解决方案上点击右键,属性。在公共属性节点中选择启动项目...

将 svn 仓库迁移到 git 仓库

我找到了一个很久很久以前编写的项目,然而当时是使用 svn 进行版本管理的。然而现在的版本管理全部是 git,不愿意再装一个 svn 工具来管理这些古老的项目,于是打算将其迁移到 git 中。 本文介绍如何将古老的 svn 项目迁移到 git。 找回 svn 仓库的 url 如果你能记得你 svn 仓库的 url,或者这个仓库是一个纯本地仓库,那么你直接复制这个 url 就好了...

.NET/C# 将一个命令行参数字符串转换为命令行参数数组 args

我们通常得到的命令行参数是一个字符串数组 string[] args,以至于很多的命令行解析库也是使用数组作为解析的参数来源。 然而如我我们得到了一整个命令行字符串呢?这个时候可能我们原有代码中用于解析命令行的库或者其他辅助函数不能用了。那么如何转换成数组呢? 在 Windows 系统中有函数 CommandLineToArgvW 可以直接将一个字符串转换为命令行参数数组,我们可以直...

git 合并策略

不清楚 git 冲突的表示方法,不了解 git 的合并原理,不知道 git 解冲突的多种策略。即便如此,大多数人依然可以正常使用 git 完成合并、拉取操作,并且解一些冲突。这得益于 git 默认情况下的合并方式可以处理大多数情况下的正常合并。 然而,你是否遭遇 git 自动合并炸掉的情况?命名提示没有冲突,代码却早已无法编译通过。 本文将介绍 git 的合并策略,你可能可以更好的使用不...

git 的合并原理(递归三路合并算法)

如果 git 只是一行行比较,然后把不同的行报成冲突,那么你在合并的时候可能会遇到大量的冲突;这显然不是一个好的版本管理工具。 本文介绍 git 合并分支的原理。 git 的冲突表示 例如我们有这样的三个提交 a、b、c。a、b 是在 master 上的其他修改,c 是我自己基于 master 上的 a 的修改。 现在,将 master 分支合并到我自己的 t/walterl...

将 .NET Core 项目打一个最简单的 NuGet 源码包,安装此包就像直接把源码放进项目一样

NuGet 原本就提供了生成源码包的功能。不过,NuGet 原生的源码包仅用于调试时自带调试信息和调试源码。 本文将以最简单的方式制作一个源码引用包。安装 NuGet 包后,不会生成任何程序集引用,而是相当于将源码直接放入被安装的程序集中一样。 准备工作 我们需要一个可以用来打 NuGet 包的 .NET Core 项目,只需要在 Visual Studio 中新建一个即可。在...

ReSharper 在 C 盘占用了太多空间了,本文告诉你如何安全地删除或转移这些文件

一个不小心,我的 SSD 又满了。到底是谁占用了那么多的空间!如果你是 ReSharper 的重度用户,那么可能你的调查结果会直指 JetBrains ReSharper。 本文将告诉你如何安全地删除这些文件来释放你的 C 盘空间,然后在 ReSharper 中设置其他的缓存目录。 消失的 C 盘空间 SSD 很贵的,看看都满成什么样儿了……我一个 SSD 分成了 C 和 D ...

WPF's multi-threaded UI is not thread safe

WPF supports multiple UI threads in its framework. You can create multiple UI thread windows or create multiple UI threads in a single window. But unfortunately, this is not really thread-safe. Th...

WPF 支持的多线程 UI 并不是线程安全的

WPF 支持创建多个 UI 线程,跨窗口的或者窗口内的都是可以的;但是这个过程并不是线程安全的。 你有极低的概率会遇到 WPF 多线程 UI 的线程安全问题,说直接点就是崩溃。本文将讲述其线程安全问题。 简述这个线程安全问题 必要条件: 创建多个 WPF UI 线程 其实两个就够了,一个我们平时写的 App 类所在的主 UI 线程;一个后台 UI ...

.NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例

我们知道,在编译期间相同的字符串,在运行期间就会是相同的字符串实例。然而,如果编译期间存在字符串的运算,那么在运行期间是否是同一个实例呢? 只要编译期间能够完全确定的字符串,就会是同一个实例。 字符串在编译期间能确定的运算包括: A + B 即字符串的拼接 $"{A}" 即字符串的内插 字符串拼接 对于拼接,我们不需要运行便能知道是否是同一个实例: priva...

使用 Xamarin 开发 iOS 应用中需要注意的若干个问题

本文收集整理使用 Xamarin 开发 iOS 应用时可能会遇到的各种问题。 需要注册 Apple Developer Portal 不管你用什么开发 iOS 应用,成为一个 Apple 的开发者是必要的。 访问:https://developer.apple.com/register/ 登录 同意协议 完成!虽然简单,但是如果没有成为开发者,那么你在所有工具...

C# 永远不会返回的方法真的不会返回

一般情况下,如果一个方法声明了返回值,但是实际上在编写代码的时候没有返回,那么这个时候会出现编译错误。 然而,如果方法内部出现了永远也不会退出的死循环,那么这个时候就不会出现编译错误。 请看下面这一段代码,RunAndNeverReturns 方法声明了返回值 int 但实际上方法内部没有返回。这段代码是可以编译通过而且可以正常运行的。 namespace Walterlv.Dem...

CentOS 的终端中如何搜索文件

CentOS 中搜索文件可以使用 find 命令。 如果需要在当前文件夹中搜索文件,那么可以使用命令: ~$ find -name filename 其中 filename 是你需要找的文件或文件夹的名称。我们没有指定搜索文件的路径,默认是当前文件夹。 如果你希望在所有文件夹中查找,那么可以使用命令: ~$ find / -name filename 这里的 / 是根目录...

不使用 U 盘等任何工具全新安装 Windows 操作系统

安装 Windows 有非常多种方法,现在我们要解决的问题是: 手头没有量产的 U 盘,或者懒得花时间去用 iso 文件量产 U 盘; 不想在 Windows 现有系统下安装(可能是为了全新安装,也可能是为了跳过安装序列号/产品密钥) 于是本文教你如何一步一步在 Windows RE 环境下安装操作系统。 准备工作 Windows 10 的安装文件 ...

C#/.NET 如何确认一个路径是否是合法的文件路径

很多方法要求传入一个字符串作为文件名或者文件路径,不过方法在实际执行到使用文件名的时候才会真正使用到这个文件名;于是这这种时候才会因为各种各样的异常发现文件名或者文件路径是不合法的。 有没有方法能够提前验证文件名或者文件路径是否是合法的路径呢? 这是一个不幸的结论 —— 没有! 实际上由我们自己写代码判断一个字符串是否是一个合法的文件路径是非常困难的,因为: 不同操作系统的...

让 MSBuild Target 支持 Clean

我们有时候会使用解决方案的清理(Clean)功能来解决一些项目编译过程中非常诡异的问题。这通常是一些 Target 生成了一些错误的中间文件,但又不知道到底是哪里错了。 我们自己编写 Target 的时候,也可能会遇到这样的问题,所以让我们自己的 Target 也能支持 Clean 可以在遇到诡异问题的时候,用户可以自己通过清理解决方案来消除错误。 以下代码来自于 SourceFus...

出于迁移项目的考虑,GitHub 中 Fork 出来的项目,如何与原项目断开 Fork 关系?

如果需要为 GitHub 上的项目做贡献,我们通常会 Fork 到自己的名称空间下。在推送代码之后添加 pull request 时,GitHub 会自动为我们跨仓库建立 pull request 的连接,非常方便。但是,如果 Fork 是出于项目的迁移,例如从个人名下迁移到某个组织下或者反过来,那么这种自动的 pull request 的设置就很影响效率了。 那么这种情况如何处理呢?如何...

.NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)

如果你试图通过 GetHashCode 得到的一个哈希值来避免冲突,你可能要失望了。因为实际上 GetHashCode 得到的只是一个 Int32 的结果,而 Int32 只有 32 个 bit。 32 个 bit 的哈希,有多大概率是相同的呢?本文将计算其概率值。 对于 GetHashCode 得到的哈希值, 9292 个对象的哈希值冲突概率为 1%; 77163 个对...

int? 竟然真的可以是 null!.NET/C# 确定可空值类型 Nullable 实例的真实类型

使用 Nullable<T> 我们可以为原本不可能为 null 的值类型像引用类型那样提供一个 null 值。不过注意:Nullable<T> 本身也是个 struct,是个值类型哦。这意味着你随时可以调用 .HasValue 这样的方法,而不用担心会出现 NullReferenceException。 等等!除了本文提到的一些情况。 Nullable 中...

签署 Centennial Program Addendum,使用 Desktop Bridge 将 Win32 应用转制成 UWP

能上架 Windows 应用商店的并不一定必须是 UWP 应用程序或者 PWA 程序,也可以是普通的 Win32 应用程序。典型的上架应用商店的应用有微信、Telegram、Snipaste 等。使用 Desktop Bridge,我们即可以为我们的普通 Win32 应用程序做一个 UWP 的包来。 商店中那些转制的应用 如果你并没有感受到 Win32 转制的商店应用和原生的 U...

C# 中委托实例的命名规则

我们知道一个类中的属性应该用名词或名词性短语,方法用动词或动宾短语;但是委托的实例却似乎有一些游离。因为在 .NET 中委托代表的是一个动作,既可以把它看作是名词,也可以看作是动词。在用法上,既可以像属性和变量一样被各种传递,也可以像一个方法一样被调用。 那么委托实例的命名,应该遵循属性和变量的命名,还是遵循方法的命名呢? 委托的实例可以当作属性或者变量使用: var action...

三值 bool? 进行与或运算后的结果

bool? 实际上是 Nullable<Boolean> 类型,可以当作三值的 bool 类型来使用。不过三值的布尔进行与或运算时的结果与二值有什么不同吗? 重载条件逻辑运算符“与”(&&)“或”(||) 在 [C# 重载条件逻辑运算符(&& 和   )](/post/overloa...

为什么我们不应该使用微信或者 QQ 作为团队协作的 IM 工具?

如果你的团队没有觉得微信是低效的团队 IM 工具,那只有两种可能: 团队成员很少使用微信进行私人的生活和娱乐。 你就是一个低效的团队,而且还不自知。 微信,连接一切 微信,连接一切。除了家人、朋友、同学这些熟人关系,还有同事、客户、用户、企业号这些工作上的关系,还有各种各种办事小程序、各种资讯公众号、各种商店服务号、快递通知等生活和私人的快捷入口。 每个人都有微信...

Slack 开发入门之 Incoming Webhooks:往 Slack 的 Channel 中发消息

一个工程师团队使用 Slack 进行团队协作比 QQ / 微信流的效率高多啦。除了基本的 IM 之外,它的扩展性也是非常重要的一点。 本文介绍 Slack 的开发入门:Incoming Webhooks 篇。 创建一个新 Slack 应用 如果你已经创建了一个 Slack 应用,可以跳过这一节。 在这里 https://api.slack.com/apps/new 创建一个新...

WPF 中那些可跨线程访问的 DispatcherObject(WPF Free Threaded Dispatcher Object)

众所周知的,WPF 中多数对象都继承自 DispatcherObject,而 DispatcherObject 带给这些对象一个特点:不能跨线程访问。 不过,WPF 中依然存在一些例外。本文将介绍 WPF 那些可跨线程访问的 DispatcherObject,如何充分利用这个特点提高应用程序的性能,以及如何自己编写这样的 DispatcherObject。 什么样的 Dispat...

.NET 使用 XPath 来读写 XML 文件(顺带解决 XML 命名空间的问题)

XPath 是 XML 路径语言(XML Path Language),用来确定XML文档中某部分位置的语言。无论是什么语言什么框架,几乎都可以使用 XPath 来高效查询 XML 文件。 本文将介绍 .NET 中的 XPath 相关类型的使用。 本文读写的 XML 文件会以 文章末尾的代码 - 假设的 XML 文件 作为示例。 关于 XPath 语法,可以阅读 XML 的 XPa...

基于 task 为 VSCode 添加自定义的外部命令

我们有很多全局的工具能在各处使用命令行调用,针对某个仓库特定的命令可以放到仓库中。不过,如果能够直接为顺手的文本编辑器添加自定义的外部命令,那么执行命令只需要简单的快捷键即可,不需要再手工敲了。 写一个外部命令的调用 由于是调用外部工具,所以工具本身用什么语言写已经不重要的了,只要有环境,没有什么是不能执行的。 这里以我博客中使用的外部命令 mdmeta 为例。我将此工具使用 ...