从零开始学习 dotnet 编译过程和 Roslyn 源码分析

本文整理我和 林德熙 学习的 dotnet 编译知识、Roslyn 源码分析知识,NuGet 知识。通过阅读本文可以从零散的碎片化博客中得到从零开始学习的轨迹。

本文服务于 微软技术暨生态大会 2018 课程,你可以学习预编译框架相关的技术原理。


SourceYard 性能数据

SourceYard 通过将公共组件的源代码和产品源代码合并来提升性能。

以下是这部分的性能数据:

不过,程序集中的类的数量对启动性能没有影响:

SourceFusion 性能数据

SourceFusion 的其中一个用途是收集原本会通过反射收集的类型信息。

以下是这部分的性能数据:

额外的,如果不是收集而单单只是使用的话,这里是性能数据:

dotnet build 基础

你需要先了解 csproj 文件的结构,以便进行后续的学习:

在了解到 csproj 文件结构之后,你可以通过迁移一些项目,并确保他们编译通过来练习:

接着,csproj 中的重要内容 Target 对理解编译过程非常重要,因为它决定了如何编译这个项目:

更高级的 Target 用法:

基于 Target 的一些应用:

当现有的知识和文档不足以帮助你完成现有功能的时候,也许你该考虑阅读官方源码了:

还有一些 csproj 特性的使用:

NuGet 基础

可以使用 NuGet 做一些不是传统 dll 引用的功能:

现在,我们需要真的使用 NuGet 做一个自己的工具了:

NuGet 的坑很多,有些可以解,有些需要规避:

如果你的 NuGet 格式是旧的,或者说引用方式是旧的,推荐升级:

学会这些 NuGet 技能之后的一些应用:

SourceYard 原理

SourceYard 利用 NuGet 自动 Import 的 Target 来执行我们的代码:

Roslyn 基础

Roslyn 由于其丰富且易用的 API,所以入门是比较容易的。推荐的入门文章有:

额外的,你可以阅读更多 Roslyn 的资料以便快速应用于你的项目:

Roslyn 为何能够在提供如此友好的 API 的情况下依然有如此高的性能?

一些 Roslyn 的额外功能:

SourceFusion 预编译框架

关于预编译框架的博客没有那么多,只有一些基本的使用:

扩展阅读

这里是是用到了 csproj / NuGet 等的额外博客:

本文会经常更新,请阅读原文: https://walterlv.com/post/posts-for-learning-dotnet-build-nuget-roslyn.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 (walter.lv@qq.com)