自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

黄腾霄的博客

可以同时关注主站,http://xinyuehtx.github.io/

  • 博客(24)
  • 收藏
  • 关注

原创 如何使用winrar制作一个安装包

当你完成了一个awesome的程序之后,如何分享给你的小伙伴?压缩包?太low。安装包?太难。折中一下,搞一个自解压安装包如何?工具很简单,Rar就可以了首先将想要的文件创建rar压缩包,在选项中勾选,创建自解压格式压缩文件我们看到勾选后文件后缀名就变成了exe接下来进入,高级-自压缩选项,里面可以进行一些高级的配置常规设置:可以在“安装”(解压)前后运行一...

2020-01-26 10:28:50 1810

原创 小心使用HResult进行比较

在c#代码中处理一些系统出现的异常的时候,常常需要对异常的HResult属性进行处理。于是我们就会写出以下代码if(e.HResult==0x80030005){ ...}然而有时候会惊奇的发现结果并没有如预期的进入if分支so why事实上如果你安装了Resharper,就会在这句代码里面得到提示因为我们的HResult的值是uint,而Exception.HRes...

2020-01-25 22:39:53 253

原创 请不要依赖于异步代码的调用方catch异常

熟悉了c#的异步方法后,各种是不是就会有一种一发不可收拾的情况对于我们熟悉的 async/await 方法,我们知道await可以执行一个异步方法,并且在方法结束后“继续”当前方法之后的代码。这个对于执行耗时操作,且不阻塞当前线程的情形非常有效,例如foo(){ await A_async(); B();}那么假设下如果方法A_async会抛出异常,那怎么办。很简...

2020-01-24 18:32:59 223

原创 如何使用远程桌面操控局域网主机

亲,你的服务器可用了~公司的服务器离我好远,每次去跑项目都很辛苦。所以就研究了下windows远程桌面协助。被控端电脑配置首先打开系统属性—远程点击选择用户,添加点击高级点击立即查找—选择指定用户(确保你拥有这个用户的密码)查询到被控制电脑的ip,可以使用cmd的ipconfig连接远端电脑进行控制打开远程桌面,输入被控制电脑的ip地址和需要登...

2020-01-23 09:20:01 934

原创 使用jenkins+gitlab进行CI

我们大部分程序员都是只想安安静静的写代码,但是总是绕不过去的一个问题就是打包和发布。我们团队的流程是这样子的vs编写代码gitlab merge request审核合并jenkins打包发布然而我们还是会常常遇到一些问题,比如打包不过呀,低级bug呀等等各种问题然后revert,hotfix那么问题来了,我们程序员有限的生命这么宝贵,为什么要浪费在这些问题上。CIci持续...

2020-01-23 09:10:52 1082

原创 快捷调试Nuget包

开发C#项目时通过Nuget引用添加依赖很方便,但是调试的时候就不一样了。情景再现我们有一个超级基础的库A,我们的多个公共组件B,C,D,和最终产品E都依赖于库A。现在我们在开发A的新功能时,期望能在最终产品E中得到测试验证。不可行方法通过添加引用的方式添加本地包由于最终产品E的依赖项,依赖于nuget上的库A,nuget发现有同名dll就会出现冲突可行方法最简单的方法...

2020-01-22 17:04:43 1351 3

原创 Process执行路径

我们可以通过Process开启一个进程,但是如果通过这个进程再开启另一个进程时,就容易发生错误。上Demo1、我们在vscode的目录下,建立一个名为2.bat的脚本,里面输入命令Code.exe打开vscode2、然后,我们在同一个目录下打开PowerShell ,输入Start-Process .\2.bat通过Process的方式运行这个脚本。我们发现运行一切正常那么如果添加...

2020-01-21 09:01:01 1514

原创 WPF程序在shutdown期间引发的TaskCanceledException

先上堆栈TaskCanceledException at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime....

2020-01-20 08:52:54 988

原创 为什么同样的WPF控件在不同的电脑上呈现外观不一致

今天有同事跑过来说遇到了一个奇怪的bug,同样的程序在win7和win10上界面相差了2个像素一开始我们以为是半像素或者是分辨率的问题。结果调试了很久都没有结果。不过意外的我们发现了另一个奇妙的东西。下面两个图分别是在win7和win10情况下soonp获得的可视化树(已用demo替换)有么有发现TabControl的子元素Grid多出了一个名字templateRoot。在代码里...

2020-01-19 08:15:07 1128

原创 默认的WPF样式在哪里

我们使用WPF的控件时,.NET framework会为我们提供一些默认的样式一开始我们会认为这个是依赖属性的默认值。但是实际上并非如此我们可以通过以下方法看下默认Button的Template属性Control.TemplateProperty.GetMetadata(typeof(Button)).DefaultValue我们神奇的发现,返回值是null那么不是依赖属性的默认值就...

2020-01-19 08:10:34 916

原创 theme主题的原理

在反编译WPF程序集的时候经常会发现一个命名为theme的文件夹这个文件夹中存放着一个预编译的资源字典,如图这个实际上是wpf的一个冷门功能:windows主题支持。你可能没有听说过这个功能,但是如果你像我一样是接触过xp的上个世纪过来的人,就会记得windows的不同主题能够影响元素外观。其实这个功能在WPF 也有保留,只是大家定制的样式多了,没有注意到罢了参见为什么同样的WPF控...

2020-01-18 09:00:39 560

原创 RenderTransformOrigin和RotateAt一起作用会怎样

我们都知道RotateTransform会受到旋转中心RenderTransformOrigin的影响因此我们如果期望在中点旋转,我们可以选择设置RenderTransformOrigin=0.5,0.5 <Rectangle Width="100" Height="100" Fill="Teal" RenderTransformOrigin="0.5,0.5">...

2020-01-17 08:45:47 607

原创 如何将文字转换为对应的PathGeometry

有些时候你期望用Path画出一些文本的形状比如说你会期望做出如下效果什么让UI给个图?恩,有道理,可惜我不是UI,我不会咋办呢?其实我们可以使用FormattedText的BuildGeometry将字符串转成对应的Geometry首先我们要构造一个FormattedText对象例子中的参数分别为:要渲染的字符串,CultureInfo,文字布局方向,字体信息,字号,Brush,...

2020-01-16 08:46:59 1218 2

原创 Git单文件多次提交的cherry-pick

曾几何时,你发现你做的项目经常有甲方爸爸需要xxx定制版“一堆定制版,你让我们怎么维护。我们是有骨气的程序员,安能摧眉折腰事权贵。”“这个项目据说有2000万”“明天给你验收包”于是你的仓库里面就充满了各式各样的定制版分支。从此一个新功能要和n多个分支。那么问题来了你的定制版分支custom中测出了一个bug,而这个bug你在master分支已经修改了.但是这个修改涉及了好几个co...

2020-01-15 18:42:30 340

原创 VisualStudio部分编译

你有一个大的解决方案,里面毛毛多的项目。一次编译要好久,怎么办?1、你是一个单进程的项目,项目里面都是你的依赖。没关系,全宇宙最好的IDE,visual studio会帮你,点击运行,会自动编译你的启动项目以及其依赖的项目。就是说所有的项目都是最新的。你说时间久,没关系全宇宙最好的IDE,visual studio会帮你。它有一个叫增量编译功能,检查编译的项目,只要是未修改的,就不会再...

2020-01-15 08:55:20 924

原创 Git单文件多次提交的cherry-pick

曾几何时,你发现你做的项目经常有甲方爸爸需要xxx定制版“一堆定制版,你让我们怎么维护。我们是有骨气的程序员,安能摧眉折腰事权贵。”“这个项目据说有2000万”“明天给你验收包”于是你的仓库里面就充满了各式各样的定制版分支。从此一个新功能要和n多个分支。那么问题来了你的定制版分支custom中测出了一个bug,而这个bug你在master分支已经修改了.但是这个修改涉及了好几个co...

2020-01-13 08:47:21 742

原创 Moq基础(六)

这一章是最后一讲,我们讲一下Moq中值得注意的小技巧,以及对Moq使用的评价MockBehavior:伪对象行为在使用Moq创建伪对象时,可以在构造函数里传入MockBehaviorMockBehavior有了两种:Loose:默认行为,任何未显示伪造的方法和属性都会返回默认值,且不会抛出异常。Strict: 任何调用都需要显式Setup,并使用VerifyAll验证。什么意思呢...

2020-01-12 15:11:51 664

原创 Moq基础(五)

上一章我们将讲了伪造属性和事件这一章我们将参数匹配,回调,和验证It:参数匹配It 这个类其实我们已经在前面有所涉及。我们使用It.IsAny<string>()匹配任意字符串。fakeFoo.Setup(fake => fake.DoSomething(It.IsAny<string>())).Returns((string value)=>valu...

2020-01-12 15:09:37 572

原创 Moq基础(四)

上一章讲了如何使用Setup伪造方法这一章我们将伪造属性和事件Setup:伪造属性上一章我们说过setup系列不仅可以伪造方法,也可以伪造属性(毕竟属性本质也是方法,┓( ´∀` )┏)。这里依然用上一次的moq官方文档中的接口为例public interface IFoo{ Bar Bar { get; set; } string Name { get; set; }...

2020-01-11 15:20:23 789

原创 Moq基础(三)

Moq基础(三)上一章区分了下stub,和mock这一章我们的确要开始讲moq的api了Setup系列Setup系列的函数用于伪造特定方法的返回值。当然这个方法也会包含属性的方法Setup:伪造方法setup伪造方法返回值的格式为伪对象.Setup(fake=>fake.方法名).Returns(返回值)这里用moq官方文档中的接口为例public interface IF...

2020-01-10 18:41:00 576

原创 Moq基础(二)

Moq基础(二)上一章介绍了手动创建单元测试依赖,和Moq的小demo这一章我们看一下Moq的使用。不过,at the vary beginning,我想再和大家确认两个概念问题——Stub(存根)和Mock(模拟)Stub和Mock都是测试方法依赖隔离的伪造对象,不同之处是Stub是测试方法运行所需要的依赖,Mock是测试方法验证说需要的依赖。听懂了么?没有懂对不对。没关系,我们上...

2020-01-09 19:09:39 425

原创 Moq基础(一)

Moq基础(一)在教程开始之前,先回顾下单元测试应该有哪些特点?运行快,自动化,结果稳定,隔离等等。但是并不是所有的方法都能写出这样的单元测试。比如说有如下类: public class Foo { private Log _log; public Foo(Log log) { _log = log;...

2020-01-08 22:12:01 1107

原创 C#重载和继承混用会怎样?

C#重载和继承混用会怎样?OverLoad就是重载,大家都会。但是大家有没有想过,我们调用一个重载方法的时候会调用哪个呢??答案是和签名最接近的一个。大家是不是看到这里已经开始觉得这个博客很无聊了,都是这么简单的内容。没关系,我们慢慢深入。我们知道方法为了能够减少书写个数, 提供了一个叫默认参数的东西void P(object p1, bool p2 = true){}这样我们...

2020-01-07 21:08:07 108

原创 EventTrigger原理浅谈

EventTrigger原理浅谈EventTrigger相信大家都会写,就和下面的东西一样样的。<EventTrigger RoutedEvent="Mouse.MouseEnter"> <EventTrigger.Actions> <BeginStoryboard> ...

2020-01-06 20:54:58 1413

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除