dotnet 职业技术学院

博客

dotnet 职业技术学院

2020-3-5-C#代码生成之T4模板组成

dotnet 职业技术学院 发布于 2020-03-05

我们在2020-3-3-使用T4模板进行C#代码生成 - huangtengxiao介绍了C#使用T4模板生成代码。

今天给大家详细介绍下T4模板的组成


T4模板的组成部分

T4模板的组成部分如图所示。主要由文本部分,以及非文本部分的指令(Directives)和控制块(Control blocks)组成。

image-20200305112256219

下面是一个T4模板示例以及最终的生成效果。

image-20200305114021532

image-20200305114119830

文本

文本是直接在生成文件中输出的内容。

所有的文本元素包括空格和缩进都会原封不动的输出到生成文件中。

指令块

指令块由<#@ #> 包裹。主要用于控制模板的处理方式。

例如<#@ assembly name=”System.Core” #> 这句指令,能够在处理模板时,引用System.Core程序集。

这样我们就可以在模板的控制块中,使用System.Core程序集中所包含的方法。

标准控制块

标准控制块由<# #> 包裹。主要用于表示一整段处理代码。

有了标准控制块,我们就可以利用诸如分支,选择等逻辑,对生成的代码进行控制。

表达式控制块

表达式控制块由<#= #> 包裹。

当我们期望将一段表达式,或者某个变量的值,插入生成文本中,就可以使用表达式控制块。

这给了我们利用输入内容生成代码的能力。

类功能控制块

类功能块由<#+ #> 包裹。他表示一些辅助方法。

例如我们这里定义了一个Foo方法返回一个数值的平方。

这可以大大减少重复代码的书写。

不过需要注意的是,类功能控制块只能够写在模板的末尾。


简单搭建自己的博客

lindexi 发布于 2020-03-05

本文主要讲如何使用 Jekyll 在 Github 搭建博客,其实我们还可以在国内网站搭建,本文是记下我从不知道 github 搭建博客,到成功搭建了博客遇到的问题 我在github建立了博客,博客地址:lindexi.github.io 使用技术得到 ddatsh.com 的支持,对他表示衷心感谢 搭建一个博客需要的技术很少,不需要在电脑安装什么,直接Clone一个主题,然后修改个人信息,放入博客就好。

生成密码

lindexi 发布于 2020-03-05

本文提供一个简单的方式让大家可以轻松记住一个账户和密码,来得到对每个不同的网站有一个对应的密码。

手机1520 win8.1升级win10

lindexi 发布于 2020-03-05

昨天买了手机1520,卖家不错:https://item.taobao.com/item.htm?id=525484481986 于是我想把win8.1升级为win10 首先去http://www.ithome.com/html/windowsphone/140136.htm 下载Windows Insider,因为我没有在手机打开,所以想要扫码,扫码可以搜索 扫扫看 也是软媒的 然后扫码 这里写图片描述 接着可以拿到Windows Insider 因为需要Windows Insider会员,可以在pc注册https://insider.windows.com/ 接着可以备份,因为我才买来,我就没有 打开发现有几个选项:http://www.cnbeta.com/articles/474089.htm 这里写图片描述 Fast:是那些想要享受第一时间获得系统新版本和功能更新的Insider用户最佳选择,为了识别存在的问题从而让设备承担一些风险,提供建议和想法从而让Windows软件和设备更优秀。

图论 Warshall 和Floyd 矩阵传递闭包

lindexi 发布于 2020-03-05

私密密码本 2.1 源代码

lindexi 发布于 2020-03-05

本文告诉大家如何开发一个软件,本文记录了开发软件的遇到的问题

从零开始用 dotnet 做全栈开发

lindexi 发布于 2020-03-05

我是一个小白,但我想做全栈开发,我想从桌面端写到移动端,想从后台写到前端。但是我不想学习,怎么破。没关系,用 dotnet 做,这个技术方向的教程文档特别齐全,入门难度超级低。同时各个方向的开发都是差不多的,至少在 VisualStudio 安装完成之后,几乎哪个方向都能在半个小时之内做自己的修改跑起来

逗比面试官成长路线 如何让被面试者觉得糟心

lindexi 发布于 2020-03-05

这几天在参加面试官培训,本来是想记录一下内容的,但是涉及到公司的不能对外公开的信息,于是我就准备反过来写,告诉大家怎么做才能让被面试者觉得糟心。尽管我现在所在的公司在某乎上存在了很多有趣的评论,但是本文努力告诉大家,如何让被面试者很有动力在某乎上写一篇很长的文章

解决从旧格式的 csproj 迁移到新格式的 csproj 格式 AssemblyInfo 文件值重复问题

lindexi 发布于 2020-03-05

现在很多小伙伴开始使用了 dotnet core 项目,但是如果是从以前的 dotnet framework 的项目修改为 dotnet core 项目格式,会发现编译的时候出现了 AssemblyInfo 里面的很多值重复

浅谈 Windows 桌面端触摸架构演进

lindexi 发布于 2020-03-05

我在和小伙伴水触摸相关的坑,说到了上古的触摸,很难和小伙伴统一知识,于是就写了本文用于告诉大家,桌面端的触摸架构是如何一步步演进的

如何入门 C++ AMP 教程

lindexi 发布于 2020-03-05

本文告诉大家如何写一个 Helloworld 程序。

如何在国内发布 UWP 应用

lindexi 发布于 2020-03-05

在国内的开发者,相信都遇到这样的情况,辛苦开发了几个月的应用,发布到应用商店,发现只有几个下载。不断推广却发现有用户评论垃圾应用下载不了。 在国内开发 UWP 最大的问题就是用户很难通过应用商店下载应用,开发出来的应用无法让用户使用。

加强版在国内分发 UWP 应用正确方式 通过win32安装UWP应用

lindexi 发布于 2020-03-05

几乎所有国内的 UWP 开发者都知道,在国内开发 UWP 应用最大的问题不在于那么多系统的适配和不断修改的 API 接口,而是用户根本无法下载安装应用。在国内除非能掌握入口,否则想要将 UWP 开发应用在商业团队是很难的。刚好我所在的团队能将硬件设备直接给到用户,此时预装的系统里面就可以带上自主开发的 UWP 应用,解决了用户无法在应用商店安装应用的坑。但是大多数的团队都不能这样做,同时我的团队如果只是依靠硬件设备预装,那么会限制用户量。本文告诉大家如何使用传统的方法,将 UWP 作为 win32 应用安装包方法分发给用户安装

记一次调试资源管理器未响应经验

lindexi 发布于 2020-03-05

有小伙伴告诉我一台设备全触摸失效了,但实际上是资源管理器未响应。我相信微软的实力,因为这台设备是自主研发的设备,所以我和几个小伙伴一起调试而不是去喷微软 通过本文可以了解到调试的思路和用到的工具

微软框架下载

lindexi 发布于 2020-03-05

微软 提供的最新 .net Framework 4.7 之前只是可以在创造者更新使用,现在支持很多的版本的系统。 本文提供 .net core 2.0 的离线下载安装包。.net Framework 4.7 以及其他版本的下载地址。 提供的地址为官方的地址。