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

栏目: ASP.NET · 发布时间: 6年前

内容简介:本文整理我和本文服务于SourceYard 通过将公共组件的源代码和产品源代码合并来提升性能。

本文整理我和 林德熙 学习的 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 ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Effective Modern C++ 简体中文版

Effective Modern C++ 简体中文版

Scott Meyers / 高博 / 中国电力出版社 / 2018-4-23 / 99

想要彻底理解C++11和C++14,不可止步于熟悉它们引入的语言特性(例如,auto型别推导、移动语义、lambda表达式以及并发支持)。挑战在于高效地运用这些特性——从而使你的软件具备正确性、高效率、可维护性和可移植性。这正是这本实用的图书意欲达成的定位。它描述的正是使用C++11和C++14——现代C++来撰写真正卓越的软件之道。 涵盖以下主题: 大括号初始化、noexcept规格......一起来看看 《Effective Modern C++ 简体中文版》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码