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

微软技术暨生态大会(Tech Summit),2018 年在上海世博中心召开。这是最后一次的 Tech Summit 了;明年开始,中国大陆地区就要和其他国家和地区一样,进行全球 Ignite Tour 了。

我也有幸成为分会场讲师团队的一员,课程是《预编译框架 - 开发高性能应用》。内容就是我博客中与 MSBuild / Roslyn / dotnet / NuGet 相关的内容;我们将利用这些知识打造一个高性能客户端应用。

640?wx_fmt=png

进入 微软技术暨生态大会 官网可以了解更多内容。如果你和我一样对微软技术富有热情,那么也欢迎你 买票 一起去上海。

关于课程《预编译框架 - 开发高性能应用》

时间:2018 年 10 月 27 日 11:00-11:45 代号:DEV306 难度:L300

利用 Roslyn 在编译期间提前完成收集和修改所需的各种信息,我们能将 .NET 的反射耗时降低到近乎为 0! 当前大多数的框架都离不开反射的支持,但是 .NET 的反射很伤性能,而不用反射又很难支撑大型应用;基于 Roslyn 的预编译框架旨在解决这些性能问题。

本次讲题能学到什么?

  1. 体验预编译框架的强大性能

  2. 理解 dotnet build 的编译过程

  3. 使用 Roslyn 分析和修改项目源代码

  4. 如何开发自己的预编译框架

  5. 制作源代码引用 NuGet 包(而不是 dll 引用 NuGet 包)

其实此课程的计划课程内容有 2.5 小时,毕竟博客都有好几十篇了呢。算上跟我一起研究这项技术的林德熙的与 Roslyn 相关的博客,那就更多了,而且还在持续增加中。不过实际分会场课程中内容众多,留给每个讲师的时间只有 45 分钟,必须减少和压缩课程内容。

于是,实际课程会以入门为主,进阶内容将作为资料线下学习。注意:即便是“入门”,难度也依然是 L300(难度范围为 L100-L400),所以你必须拥有一定的 .NET 开发知识和一些应用开发经验才会理解课程内容。如果你的经验更偏客户端应用开发,那么更能体会本课程内容的目的。

额外的,彩排在 26 号 9:40-10:00。

课程大纲

课程大纲是为 2 小时的课程而设计的。所以实际上我只会讲大部分内容,以下所有动手实验和演示的地方都会略过,代之以提前运行和编写的结果。

实际课程中会略过的部分以斜体表示

  • 引入

    • 收集:反射 VS 配置文件 VS 预编译

    • 调用:直接调用 VS 最快反射 VS 预编译

    • 程序集个数:1 个 VS ……

    • 一批性能数据

  • 概览

    • 源码包

    • 编译期类

    • 类模板

    • 扩展

    • 了解源码包 SourceYard 和预编译框架 SourceFusion

    • 学会编写编译期代码以提升应用性能

    • 目录

    • 预编译框架的原理

    • 多个 API 的展示

  • 教学

    • 理解 dotnet build 的编译过程

    • 动手实验:SourceYard 源码包简化版

    • 学习使用 Roslyn 分析源代码

    • 动手实验:SourceFusion 预编译框架简化版

    • 理解 csproj 文件格式

    • 理解编译过程

    • 理解 NuGet 打包原理

    • 编译期间执行一个 exe 程序

    • 在 exe 程序中接收参数并干预编译结果

    • 语法可视化窗格

    • 分析 C# 语法树

    • 在编译期间执行代码

    • 在编译期间收集程序集中具有特定标记的所有类型

    • 生成代码以快速访问这些类型的特定方法

    • 目标:学会使用编译期代码代替反射以提升应用的执行性能

    • 教学目录

  • 回顾

    • 回顾 dotnet build 的编译过程和 Roslyn 分析源码

    • SourceYard 和 SourceFusion 的开源仓库,欢迎加入

关于讲师 —— 吕毅

你可以进入 微软技术暨生态大会 - 大会日程 页面,然后点击 “演讲嘉宾”。

640?wx_fmt=png

在这里,你可以看到主题演讲、分会场课程以及动手实验室的各位讲师,可以去了解每一位讲师以及他们的课程。当然,你也可以看到我。

640?wx_fmt=png

欢迎你的加入

最后,欢迎你一起参加微软技术暨生态大会,我们一起去与微软大咖,各位微软 MVP,社区技术牛人交流技术。

  • 购票

  • 微软粉丝之夜报名(目前名额已满)

课程课件使用 希沃白板 5 制作,这是一款专门针对教学场景设计的互动课件工具。

640?wx_fmt=png

相关链接

SourceYard 源码包

  • 将 .NET Core 项目打一个最简单的 NuGet 源码包,安装此包就像直接把源码放进项目一样 - 吕毅

  • Roslyn 如何基于 Microsoft.NET.Sdk 制作源代码包 - 林德熙

SourceFusion 预编译框架

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

  • 将 WPF、UWP 以及其他各种类型的旧 csproj 迁移成基于 Microsoft.NET.Sdk 的新 csproj - 吕毅

  • 新 csproj 对 WPF/UWP 支持不太好?有第三方 SDK 可以用!MSBuild.Sdk.Extras - 吕毅

  • 如何使用 MSBuild Target(Exec)中的控制台输出 - 吕毅

  • 如何在 MSBuild Target(Exec)中报告编译错误和编译警告 - 吕毅

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

  • 如何编写基于 Microsoft.NET.Sdk 的跨平台的 MSBuild Target(附各种自带的 Task) - 吕毅

  • Roslyn 如何使用 MSBuild Copy 复制文件 - 林德熙

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

  • 解读 Microsoft.NET.Sdk 的源码,你能定制各种奇怪而富有创意的编译过程 - 吕毅

  • 帮助官方 NuGet 解掉 Bug,制作绝对不会传递依赖的 NuGet 包 - 吕毅

  • 项目文件中的已知属性(知道了这些,就不会随便在 csproj 中写死常量啦) - 吕毅

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

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

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

  • Roslyn 通过 Target 修改编译的文件 - 林德熙

  • Roslyn 使用 WriteLinesToFile 解决参数过长无法传入 - 林德熙

  • Roslyn 如何在 Target 引用 xaml 防止文件没有编译 - 林德熙

  • Roslyn 通过 nuget 统一管理信息 - 林德熙

  • Roslyn 使用 Target 替换占位符方式生成 nuget 打包 - 林德熙

  • MSBuild/Roslyn 和 NuGet 的 100 个坑 - 吕毅

  • Roslyn 通过 Nuget 引用源代码 在 VS 智能提示正常但是无法编译 - 林德熙

  • 都是用 DllImport?有没有考虑过自己写一个 extern 方法? - 吕毅

  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换 - 吕毅

  • Roslyn 入门:使用 Visual Studio 的语法可视化(Syntax Visualizer)窗格查看和了解代码的语法树 - 吕毅

  • Roslyn 静态分析 - 林德熙

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

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

  • Roslyn 语法树中的各种语法节点及每个节点的含义 - 吕毅

  • Roslyn 通过 Nuget 管理公司配置 - 林德熙

  • Roslyn 在项目文件使用条件判断 - 林德熙

更多 MSBuild / Roslyn / dotnet / NuGet 相关的知识

  • 理解 Roslyn 中的红绿树(Red-Green Trees) - 吕毅

  • Roslyn 的确定性构建 - 吕毅

  • Roslyn 节点的 Span 和 FullSpan 有什么区别 - 林德熙

  • Roslyn NameSyntax 的 ToString 和 ToFullString 的区别 - 林德熙

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

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

  • 阻止某个 NuGet 包意外升级 - 吕毅

  • 语义版本号(Semantic Versioning) - 吕毅

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

  • Roslyn 使用 Directory.Build.props 管理多个项目配置 - 林德熙

  • Roslyn 使用 Directory.Build.props 文件定义编译 - 林德熙

  • 在 Visual Studio 的解决方案资源管理器中隐藏一些文件 - 吕毅

  • 使用链接共享 Visual Studio 中的代码文件 - 吕毅

  • 为 Visual Studio 使用通配符批量添加项目文件 - 吕毅

  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序 - 吕毅

  • dotnet core 通过修改文件头的方式隐藏控制台窗口 - 林德熙

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

  • Automatically increase the semantic version using GitVersion - 吕毅

  • Reading the Source Code of Microsoft.NET.Sdk, Writing the Creative Extension of Compiling - 吕毅

更多课程

  • Microsoft Tech Summit 2018 课程简述:利用 Windows 新特性开发出更好的手绘视频应用 - shaomeng

    • 时间:2018 年 10 月 27 日 17:00-17:45

    • 讲师:邵猛

    • 代号:NUE204

原文地址:https://walterlv.com/post/dotnet-build-and-roslyn-course-in-tech-summit-2018.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319375.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ocelot简易教程(五)之集成IdentityServer认证以及授权

最近比较懒(编者注:作者不是真懒,而是在憋大招,他最近实现了把Ocelot的配置使用数据库存储),所以隔了N天才来继续更新第五篇Ocelot简易教程,本篇教程会先简单介绍下官方文档记录的内容然后在前几…

ASP.NET Core 集成测试中结合 WebApplicationFactory 使用 SQLite 内存数据库

SQLite 内存数据库(in-memory database)的连接字符串是 Data Source:memory: ,它的特点是数据库连接一关闭,数据库就会被删除。而使用 services.AddDbContext 通过连接字符串配置 EF Core 时,EF Core 会在每次查询或…

mex性质学习

E.Complicated Computations 如果一个区间的mexamexamexa,满足以下条件: 区间未出现aaa区间出现1→a−11\to a-11→a−1 因此若考虑是否存在一个区间的mex值是aaa,我们尝试把整个区间以aaa为端点划分成若干段,只要每一段内&…

AServer - 基于Asp.net core Kestrel的超迷你http服务器

AServer是基于ASP.NET Core Kestrel封装的一个超迷你http服务器。它可以集成进你的Core程序里,用来快速的响应Http请求,而不需要集成整个ASP.NET Core MVC 框架。一:什么是ASever?AServer就像它的名字一样,Just a serv…

基于Service fabric + Ocelot + Identity Server4 + 52ABP 的案例展示

10.24-27 大会Microsoft Tech Summit 2018 在上海举办,我 有幸受邀成为这场大会的讲师。Microsoft Tech Summit 2018 微软技术暨生态大会将于10月24日至27日在上海世博中心举行,这也会是国内举办的最后一届 Tech Summit,2019 年开始会以 Micr…

Feature Flag 功能发布控制

背景产品在新功能发布前,可能会采取小流量测试的方式,或者在确定方案前使用A/B测试来衡量。一般开发人员会跟运维同学合作,通过一些现有平台切换机器或者流量来实现。本文介绍了另外一种简便的方式,并解释了其在持续集成上的应用&…

SmartSql 动态代理仓储

SmartSql源码:https://github.com/Ahoo-Wang/SmartSql1|1简介动态代理仓储(SmartSql.DyRepository)组件是SmartSql非常独特的功能,它能简化SmartSql的使用。对业务代码除了配置几乎没有侵入。可以说使用SmartSqlContainer是原始方法,而DyRepo…

Ocelot简易教程(六)之重写配置文件存储方式并优化响应数据

本来这篇文章在昨天晚上就能发布的,悲剧的是写了两三千字的文章居然没保存,结果我懵逼了。今天重新来写这篇文章。今天我们就一起来探讨下如何重写Ocelot配置文件的存储方式以及获取方式。作者:依乐祝原文地址:https://www.cnblog…

.NET Core实践系列之SSO-跨域实现

前言接着上篇的《.net core实践系列之SSO-同域实现》,这次来聊聊SSO跨域的实现方式。这次虽说是.net core实践,但是核心点使用jquery居多。建议看这篇文章的朋友可以先看上篇《.net core实践系列之SSO-同域实现》做一个SSO大概了解。源码地址&#xff1a…

.NET 源代码库指南

微软.NET开发团队在博客上(https://blogs.msdn.microsoft.com/dotnet/2018/10/15/guidance-for-library-authors/)发布了.NET Library Guidance的第一个版本。这是一系列全新的文章,指导你为.NET创建高质量代码库。该指南包含我们已确定的适用…

基于gRPC服务发现与服务治理的方案

重温最少化集群搭建,我相信很多朋友都已经搭建出来,基于Watch机制也实现了出来,相信也有很多朋友有了自己的实现思路,但是,很多朋友有个疑问,我API和服务分离好了,怎么通过服务中心进行发现呢&a…

CentOS ASP.NET Core Runtime Jexus跨平台布署

.net core 开源和跨平台,能布署到当前主流的Windows,Linux,macOS 系统上。本篇我们将在 Linux 系统上使用 ASP.NET Core Runtime 和 Jexus 布署运行 ASP.NET Core 网站。Linux 系统选的是 CentOS 7.4 64位.NET Core 安装的是 ASP.NET Core Ru…

疾病预测和天气分析练习赛

肝了半天再加一个晚上。。 之前学了一小段时间的TensorFlow,但是今天练习赛时发现根本没啥用。。。第一阶段早就做完了,今天做的都是第二阶段,都是啥玩意题 又是偏度,又是求系数,又是拟合KNN,真的把人看吐…

微软智能云三驾马车Azure、Office 365、Dynamics 365齐聚中国

Dynamics 365计划于2019年春落地中国;Windows Server 2019、Office 2019正式商用;SQL Server 2019、Azure Sphere 公开预览;Microsoft Azure 更新数十项云服务与功能,聚焦物联网与边缘。2018年10月25日,上海 —— 2018…

ASP.NET Core SignalR中的流式传输

什么是流式传输?流式传输是这一种以稳定持续流的形式传输数据的技术。流式传输的使用场景有些场景中,服务器返回的数据量较大,等待时间较长,客户端不得不等待服务器返回所有数据后,再进行相应的操作。这时候使用流式传…

独立版Jexus配置SSL,支持https访问

一、申请证书【腾讯免费证书】二、验证DNS,即解析域名。记录类型选择 TXT ,主机记录与证书上的主机记录保持一致,记录值也与证书上的记录值保持一致三、等待DNS验证与CA轮询,轮询成功后即可下载证书四、Jexus用到的是Nginx中的证书…

莫比乌斯反演+例题

参考1 参考2 参考3 问题引入&#xff1a; 入门题 给定N和M和D&#xff0c;求满足1<x<N,1<y<M且gcd(x,y)D的点对(x,y)的个数 1<N,M<1000000 莫比乌斯函数 μ μ(n) 1 , n1 μ(n) (-1)k, np1 * p2 * … * Pk &#xff08;x有奇数个质因子时为-1&#xff…

.net core通过多路复用实现单服务百万级别RPS吞吐

多路复用其实并不是什么新技术&#xff0c;它的作用是在一个通讯连接的基础上可以同时进行多个请求响应处理。对于网络通讯来其实不存在这一说法&#xff0c;因为网络层面只负责数据传输&#xff1b;由于上层应用协议的制订问题&#xff0c;导致了很多传统服务并不能支持多路复…

微软官宣:史上最贵开发工具 75亿美金收购GitHub

微软副总裁红衣主教Scott Gu今天的一封邮件结束了这笔软件历史上最大收购案&#xff0c;微软给全球开发人员的开源代码仓库GitHub投入了75亿美金&#xff0c;确保这一平台的持续健康发展。GitHub为啥愿意被收购&#xff1f;“软件工程这个事情&#xff0c;从来就不是一笔好生意…

C# 中使用面向切面编程(AOP)中实践代码整洁

1. 前言最近在看《架构整洁之道》一书&#xff0c;书中反复提到了面向对象编程的 SOLID 原则&#xff08;在作者的前一本书《代码整洁之道》也是被大力阐释&#xff09;&#xff0c;而面向切面编程&#xff08;Aop&#xff09;作为面向对象编程的有力补充&#xff0c;对实践整洁…