随笔分类 -  Visual Studio

Visual Studio
摘要:我们在代码中会写 #if DEBUG 或者 [Conditional("DEBUG")] 来使用已经定义好的条件编译符号。而定义条件编译符号可以在代码中使用 #define WALTERLV 来实现,也可以通过在项目属性中设置条件编译符号(Conditional Compilation Symbol 阅读全文
posted @ 2019-01-01 11:01 walterlv 阅读(307) 评论(0) 推荐(0) 编辑
摘要:条件编译符号指的是 Conditional Compilation Symbols。你可以在 Visual Studio 的项目属性中设置,也可以直接在项目文件中写入 DefineConstants 属性。 不过对于不同种类的项目,我建议使用不同的设置方法。本文将介绍如何设置条件编译符。 对于新旧格 阅读全文
posted @ 2019-01-01 11:00 walterlv 阅读(7020) 评论(2) 推荐(2) 编辑
摘要:我在之前的博客中有教大家如何编写 NuGet 工具包,其中就有编写 .targets 文件。 我在实际的使用中,发现 Visual Studio 2017 带来的含 Sdk 的新 csproj 格式基本上没有多少坑;然而旧的 csproj 文件却总是不能完美的运行,总是出错。关键是,不是每台电脑都出 阅读全文
posted @ 2018-12-23 15:17 walterlv 阅读(411) 评论(0) 推荐(0) 编辑
摘要:MSBuild 或 Roslyn 编译项目时均支持差量编译,毕竟为了性能。我在 每次都要重新编译?太慢!让跨平台的 MSBuild/dotnet build 的 Target 支持差量编译 一文中介绍了如何使一个 Target 支持差量编译。在那篇文章中我说到差量编译会导致 Target 不执行;也 阅读全文
posted @ 2018-11-28 15:47 walterlv 阅读(257) 评论(0) 推荐(0) 编辑
摘要:路 2018 年 10 月 23 日中午,我和林德熙踏上了前往上海的旅程。这是德熙第一次进行如此长途的旅行,之前几乎一直待在家里。 微软技术暨生态大会是从 10 月 25 日到 10 月 27 日,而 10 月 24 日是微软合作伙伴会议。我们当初在制定行程时,并没有意识到微软合作伙伴会议与微软技术 阅读全文
posted @ 2018-10-31 15:05 walterlv 阅读(255) 评论(0) 推荐(0) 编辑
摘要:.NET/C# 程序从 Main 函数开始执行,基本上各种书籍资料都是这么写的。不过,我们可以写多个 Main 函数,然后在项目文件中设置应该选择哪一个 Main 函数。 你可能会觉得这样没有什么用,不过如果你的应用程序在不同的编译条件下有不同的启动代码,或者你需要持续去大范围修改启动代码,那么做一 阅读全文
posted @ 2018-10-28 11:41 walterlv 阅读(1257) 评论(0) 推荐(1) 编辑
摘要:微软技术暨生态大会(Tech Summit),2018 年在上海世博中心召开。这是最后一次的 Tech Summit 了;明年开始,中国大陆地区就要和其他国家和地区一样,进行全球 Ignite Tour 了。 我也有幸成为分会场讲师团队的一员,课程是《预编译框架 - 开发高性能应用》。内容就是我博客 阅读全文
posted @ 2018-10-15 08:46 walterlv 阅读(258) 评论(0) 推荐(0) 编辑
摘要:Roslyn 的 API 是非常易用的。即便如此复杂的 C# 语法,建立的复杂的 C# 语法树,还有其复杂的树遍历和修改过程,也都被其 API 包装得干净简洁。 而这背后是它的重要设计思路 —— 红绿树。 红绿树的影子 如果你是通过搜索找到这篇文章的,那么至少证明你调试过 Roslyn API 的使 阅读全文
posted @ 2018-07-19 20:10 walterlv 阅读(439) 评论(0) 推荐(0) 编辑
摘要:NuGet 提供了工具类型的包支持,生成一个基于 .NET Core 的 dll 或者基于 .NET Framework 的 exe 之后,你几乎可以对项目做任何事情。但是,默认情况下,NuGet 不会将这些工具的依赖一起打包进入 NuGet 包 nupkg 文件内,这就使得功能比较复杂的跨平台 N 阅读全文
posted @ 2018-07-19 19:56 walterlv 阅读(424) 评论(0) 推荐(0) 编辑
摘要:我曾经写过一篇文章 如何创建一个基于命令行工具的跨平台的 NuGet 工具包,通过编写一个控制台程序来参与编译过程。但是,相比于 基于 Task 的方式,可控制的因素还是太少了。 有没有什么办法能够让控制台程序也能与 MSBuild Target 之间发生更多的信息交换呢?答案是有的,通过捕获控制台 阅读全文
posted @ 2018-06-26 20:51 walterlv 阅读(524) 评论(0) 推荐(0) 编辑
摘要:命令行可是跨进程通信的一种非常方便的手段呢,只需启动一个进程传入一些参数即可完成一些很复杂的任务。NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NET 的包平台;我们可以利用 NuGet 发布我们的工具并自动启用这样的工具。 制作这样的一个跨平台 阅读全文
posted @ 2018-05-19 08:05 walterlv 阅读(425) 评论(0) 推荐(0) 编辑
摘要:写了这么多个 C# 项目,是否对项目文件 csproj 有一些了解呢?Visual Studio 是怎么让 csproj 中的内容正确显示出来的呢?更深入的,我能够自己扩展 csproj 的功能吗? 本文将直接从 csproj 文件格式的本质来看以上这些问题。 阅读本文,你将: 可以通读 cspro 阅读全文
posted @ 2018-05-19 07:58 walterlv 阅读(10814) 评论(1) 推荐(8) 编辑
摘要:我们在之前谈过 语义版本号(Semantic Versioning),在项目中应用语义版本号能够帮助库的开发者在发布包时表明更多的语义信息。这是趋势,从微软的博客 Versioning NuGet packages in a continuous delivery world 三部曲中可以看出,从 阅读全文
posted @ 2018-04-15 10:39 walterlv 阅读(2342) 评论(0) 推荐(0) 编辑
摘要:版本号格式不陌生吧,.NET 传统的版本号格式类似这样 1.5.1254.0。本文将推荐一种新的版本号格式——语义版本号,格式类似这样 1.4.6-beta。我推荐语义版本号是因为这样的版本号自包含语义,而且这样的语义能够在版本库中体现出来。 传统的版本号 如果你只是知道传统版本号由四个部分组成,那 阅读全文
posted @ 2018-04-15 10:37 walterlv 阅读(1560) 评论(1) 推荐(1) 编辑
摘要:手头的解决方案真大!里面的项目个数达到了 30 个或是 50 个?然而接近一半是单元测试项目和辅助工具。再加上一些不尽如人意的项目优化,编译速度真的是无力吐槽。幸好 Visual Studio 提供了解决方案配置功能,可以让我们在编译时略过一些项目。 在解决方案上右击选择“属性”,我们将打开“解决方 阅读全文
posted @ 2018-04-05 17:07 walterlv 阅读(811) 评论(0) 推荐(0) 编辑
摘要:在为开源项目 easiwin/MSTestEnhancer 进行持续集成编译时,需要在编译命令中传入较多的参数。这对于新接手此项目的人来说,成本还是高了一点儿。本文将介绍 MSBuild 响应文件 (MSBuild Response Files, *.rsp) 来优化命令行编译体验。 我们在 msb 阅读全文
posted @ 2018-04-05 17:06 walterlv 阅读(626) 评论(0) 推荐(0) 编辑
摘要:注意到每次编译完之后,你的 dll 或者 exe 是不一样的吗?本来这并没有什么大不了的,但大家都知道数字和鹅厂的安全软件遍布在我们大(tiān)陆(cháo)地区的大量电脑上,它们的查杀策略是——凡是不认识的一律是病毒木马;于是每次不一样的编译很容易引起它们的警告——真不想每次都把编译后的样本提交 阅读全文
posted @ 2018-03-31 17:23 walterlv 阅读(377) 评论(0) 推荐(0) 编辑
摘要:为什么屏幕上出现了一个灰框,里面有黑色数字,而且还不消失?强迫症难以忍受啊! ▲ 就是这个置于所有窗口最顶层,怎么也去不掉的灰色数字框 强迫症晚期请直接前往最后一节把它消灭好了,非强迫症晚期的我们一起来探究下它到底是什么。 使用 Spy++ 想探究一个界面属于哪个进程,当然少不了 Spy++。现在, 阅读全文
posted @ 2018-03-19 19:48 walterlv 阅读(418) 评论(0) 推荐(0) 编辑
摘要:命令“”xxx.exe” xxx”已退出,代码为 n。 我们在 cmd 中输入常见命令的时候,如果命令输入错误或使用错误,cmd 中会提示错误原因,帮助我们定位并解决问题。然而如果相同的命令放到了 Visual Studio 的生成事件中,我们就只能得到 Visual Studio 返回的错误代码了 阅读全文
posted @ 2018-03-19 19:43 walterlv 阅读(531) 评论(0) 推荐(0) 编辑
摘要:当你想写一个泛型 的类型的时候,是否想过两个泛型参数、三个泛型参数、四个泛型参数或更多泛型参数的版本如何编写呢?是一个个编写?类小还好,类大了就杯具! 事实上,在 Visual Studio 中生成代码的手段很多,本文采用最笨的方式生成,但效果也很明显——代码写得轻松写得爽! 我们想要的效果 我们现 阅读全文
posted @ 2018-01-31 13:37 walterlv 阅读(280) 评论(0) 推荐(0) 编辑