walterlv的专栏

欢迎访问 https://walterlv.com/ 热爱设计,不止是程序,更是艺术!

编写 Target 检测 MSBuild / dotnet build 此次编译是否是差量编译

MSBuild 或 Roslyn 编译项目时均支持差量编译,毕竟为了性能。我在 每次都要重新编译?太慢!让跨平台的 MSBuild/dotnet build 的 Target 支持差量编译 一文中介绍了如何使一个 Target 支持差量编译。在那篇文章中我说到差量编译会导致 Target 不执行;...

2018-11-28 15:47:24

阅读数:43

评论数:0

预编译框架,开发高性能应用 - 课程 - 微软技术暨生态大会 2018

微软技术暨生态大会(Tech Summit),2018 年在上海世博中心召开。这是最后一次的 Tech Summit 了;明年开始,中国大陆地区就要和其他国家和地区一样,进行全球 Ignite Tour 了。 我也有幸成为分会场讲师团队的一员,课程是《预编译框架 - 开发高性能应用》。内容就是我博...

2018-10-15 08:45:47

阅读数:159

评论数:0

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

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

2018-08-27 21:57:00

阅读数:460

评论数:0

在制作跨平台的 NuGet 工具包时,如何将工具(exe/dll)的所有依赖一并放入包中

NuGet 提供了工具类型的包支持,生成一个基于 .NET Core 的 dll 或者基于 .NET Framework 的 exe 之后,你几乎可以对项目做任何事情。但是,默认情况下,NuGet 不会将这些工具的依赖一起打包进入 NuGet 包 nupkg 文件内,这就使得功能比较复杂的跨平台 ...

2018-07-19 19:56:04

阅读数:172

评论数:0

Roslyn 入门:使用 .NET Core 版本的 Roslyn 编译并执行跨平台的静态的源码

Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性。以至于我们只需要编写很少量的代码便能够编译并执行我们的代码。 作为 Roslyn 入门篇文章之一,你将可以通过本文学习如何开始编写一个 Roslyn 扩展项目 —— 编译一个类,然后执行其中的一段代码。 本文是 Rosly...

2018-06-02 09:22:56

阅读数:740

评论数:0

每次都要重新编译?太慢!让跨平台的 MSBuild/dotnet build 的 Target 支持差量编译

如果你干预到了项目的编译过程,可能就需要考虑到差量编译了。不然——当你的项目大起来的时候,就会感受到每次都重新编译时,每次重复调试的过程都要进行漫长等待时的绝望和无奈。 如果你正遭遇差量编译失效,每次都要重新编译的问题,那么阅读本文应该能够帮助你解决问题。 msbuild.exe 和 do...

2018-05-19 08:12:30

阅读数:238

评论数:1

如何最快速地将旧的 NuGet 包 (2.x, packages.config) 升级成新的 NuGet 包 (4.x, PackageReference)

最近我将项目格式进行了升级,从旧的 csproj 升级成了新的 csproj;NuGet 包管理的方式也从 packages.config 升级成了 PackageReference。然而迁移完才发现,这个项目竟然还依赖了大量的从 NuGet 2.x 时代发布的 NuGet 包,这些包并不能在 P...

2018-05-19 08:11:50

阅读数:372

评论数:1

如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包

MSBuild 的 Task 为我们扩展项目的编译过程提供了强大的扩展性,它使得我们可以用 C# 语言编写扩展;利用这种扩展性,我们可以为我们的项目定制一部分的编译细节。NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NET 的包平台;我们可以利用...

2018-05-19 08:10:45

阅读数:308

评论数:2

如何创建一个基于命令行工具的跨平台的 NuGet 工具包

命令行可是跨进程通信的一种非常方便的手段呢,只需启动一个进程传入一些参数即可完成一些很复杂的任务。NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NET 的包平台;我们可以利用 NuGet 发布我们的工具并自动启用这样的工具。 制作这样的一个跨平...

2018-05-19 08:04:49

阅读数:200

评论数:2

理解 C# 项目 csproj 文件格式的本质和编译流程

写了这么多个 C# 项目,是否对项目文件 csproj 有一些了解呢?Visual Studio 是怎么让 csproj 中的内容正确显示出来的呢?更深入的,我能够自己扩展 csproj 的功能吗? 本文将直接从 csproj 文件格式的本质来看以上这些问题。 阅读本文,你将: 可以通...

2018-05-19 07:58:23

阅读数:389

评论数:5

项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦)

知道了 csproj 文件中的一些常用 NuGet 属性,创建 NuGet 包时就可以充分发挥新 Sdk 自动生成 NuGet 包的优势,不需要 nuspec 文件啦。(毕竟 nuspec 文件没有 .csproj 和 .targets 文件强大而又有扩展性。) “项目文件中的已知属性系列”...

2018-05-19 07:55:25

阅读数:190

评论数:2

自动将 NuGet 包的引用方式从 packages.config 升级为 PackageReference

在前段时间我写了一篇迁移 csproj 格式的博客 将 WPF、UWP 以及其他各种类型的旧样式的 csproj 文件迁移成新样式的 csproj 文件,不过全过程是手工进行的,而且到最后处理 XAML 问题也非常头疼。 现在,我们可以利用工具自动地完成这个过程。当然,工具并不将 csproj ...

2018-04-27 07:16:35

阅读数:2044

评论数:0

使用 GitVersion 在编译或持续构建时自动使用语义版本号(Semantic Versioning)

我们在之前谈过 语义版本号(Semantic Versioning),在项目中应用语义版本号能够帮助库的开发者在发布包时表明更多的语义信息。这是趋势,从微软的博客 Versioning NuGet packages in a continuous delivery world 三部曲中可以看出,从...

2018-04-15 10:38:42

阅读数:425

评论数:0

语义版本号(Semantic Versioning)

版本号格式不陌生吧,.NET 传统的版本号格式类似这样 1.5.1254.0。本文将推荐一种新的版本号格式——语义版本号,格式类似这样 1.4.6-beta。我推荐语义版本号是因为这样的版本号自包含语义,而且这样的语义能够在版本库中体现出来。 传统的版本号 如果你只是知道传统版本号...

2018-04-15 10:36:30

阅读数:741

评论数:0

VS 编译太慢了吗?新建解决方案配置关闭一部分项目的编译

手头的解决方案真大!里面的项目个数达到了 30 个或是 50 个?然而接近一半是单元测试项目和辅助工具。再加上一些不尽如人意的项目优化,编译速度真的是无力吐槽。幸好 Visual Studio 提供了解决方案配置功能,可以让我们在编译时略过一些项目。 在解决方案上右击选择“属性”,我们将打开...

2018-04-05 17:06:36

阅读数:317

评论数:0

使用 MSBuild 响应文件 (rsp) 来指定 dotnet build 命令行编译时的大量参数

在为开源项目 easiwin/MSTestEnhancer 进行持续集成编译时,需要在编译命令中传入较多的参数。这对于新接手此项目的人来说,成本还是高了一点儿。本文将介绍 MSBuild 响应文件 (MSBuild Response Files, *.rsp) 来优化命令行编译体验。 我们在...

2018-04-05 17:05:35

阅读数:118

评论数:0

Roslyn 的确定性构建

注意到每次编译完之后,你的 dll 或者 exe 是不一样的吗?本来这并没有什么大不了的,但大家都知道数字和鹅厂的安全软件遍布在我们大(tiān)陆(cháo)地区的大量电脑上,它们的查杀策略是——凡是不认识的一律是病毒木马;于是每次不一样的编译很容易引起它们的警告——真不想每次都把编译后的样本提...

2018-03-31 17:22:37

阅读数:139

评论数:2

利用 ReSharper 自定义代码中的错误模式,在代码审查之前就发现并修改错误

多人协作开发的项目总会遇到代码编写风格上的差异。一般工具都能帮我们将常见的差异统一起来——例如 if 的换行;但也有一些不那么通用,但项目中却经常会出现的写法也需要统一。 例如将单元测试中的 Assert.AreEqual(foo.GetType(), typeof(Foo)); 换成 Asse...

2018-03-20 20:34:55

阅读数:301

评论数:0

Roslyn 入门:使用 Visual Studio 的语法可视化窗格查看和了解代码的语法树

使用 Visual Studio 提供的 Syntax Visualizer,我们可以实时看到一个代码文件中的语法树。这对我们基于 Roslyn 编写静态分析和修改工具非常有帮助。本文将介绍如何安装它和使用它。 这里是 Visual Studio 的语法可视化(Syntax Visualiz...

2018-03-19 19:51:15

阅读数:324

评论数:1

Roslyn 入门:使用 Roslyn 静态分析现有项目中的代码

Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性。以至于我们只需要编写很少量的代码便能够分析我们的项目文件。 作为 Roslyn 入门篇文章,你将可以通过本文学习如何开始编写一个 Roslyn 扩展项目,如何开始分析一个解决方案(.sln)中项目(.csproj)的代码文件(....

2018-03-19 19:48:54

阅读数:2879

评论数:10

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