好家伙是法力?万法唯心,万法唯识,究竟是什么意思?

发布时间:2018-12-17  栏目:法律  评论:0 Comments

正文转自:http://www.cnblogs.com/heyuquan/archive/2012/07/26/2610959.html

今天,和豪门享用一个认识,什么是法力?

 

随大家正常的认,写以佛经上之,就是法力,就比如在现实生活中,写于法律条文中之文字虽是法规平等。

=============C#.Net
篇目录==============

不过,佛法并无是佛经上描绘的这么些字,而且,也非是释迦摩尼佛说之这个话语。这多少个,我们一般还觉得是法力之,其实都未是法力。

演示代码:示范代码__君不可能不精通的T4模板:浅入雅出.rar

立马是咱的误会!

 

那么,什么是法力呢?

(一)什么是T4模板?

的确的佛法,是甚实际的,在心智层面举行自己调整之具体方法。

T4,即4个T最先的英文字母组合:Text Template Transformation Toolkit。

据,当你晤面在心智层面,让好观自在行深,这是法力。比如,当您会晤在心智层面,让好爱惜念,这是法力。比如,当您会在心智层面体验及,内在的协调既是无以外、也不在内,这就是是法力。

T4文本模板,即一律种植起定义规则的代码生成器。按照作业模型可生成任何格局的文件文件或者供程序调用的字符串。(模型以适合吃应用程序域的款式包含消息,并且能够应用程序的生存期更改)

的确的法力,是佛经文字背后所承载的,相当现实的,在心智层面开展自身调整之具体方法,是同样种植「心智实操」

 

佛教中生出句话,我们必定死熟识:「万法唯识,万法唯心」。

VS本身才供平等仿基于T4滋生擎的代码生成的施行环境,由下程序集构成:

斯「唯心」,不是唯心主义的之唯心,而是说有着的法力,甚至连其他的杀,都是经过「心智实操」入道的,那么,怎么着才可以符合是道呢?

Microsoft.VisualStudio.TextTemplating.10.0.dll

就是「唯识」,通过对团结的「认知—行为」的反向、长远认识,感悟到温馨的心智层面,这样虽有或学会「心智实操」

Microsoft.VisualStudio.TextTemplating.Interfaces.10.0.dll

这是「万法唯识,万法唯心」的的确意义!

Microsoft.VisualStudio.TextTemplating.Modeling.10.0.dll

俺们现所见到的佛经,其实,都是释迦摩尼佛冲不同弟子的具体情状,在不同时下,指导弟子们认识这种「心智实操」

Microsoft.VisualStudio.TextTemplating.VSHost.10.0.dll

针对舍利子讲了拖欠,对要菩提道了施,对阿难提了七问。对一个笨弟子教了扫地。

 

咱会发觉,释迦摩尼教弟子,与前日之傅起个很精晓例外之差距。前几日的教育一般还起联合之读本,教的始末呢时有发生统一标准。

有利工具:

只要释迦摩尼佛教弟子,则没这个,而是依据不同弟子之具体意况,依据时机,随机应变,只要会指点弟子认识及这种「心智实操」,任何方法,任何手段仍然得就此之。

1、 
T4Toolbox.msi(CodePlex上开源之家伙)

当下跟至圣先师对学子讲仁很像,孔夫子讲仁也绝非一个合之说教,也是冲不同的门生,举行不同之上课。

a)         提供部分足直接使用的代码生成器,比如Enum SQL View、AzMan
wrapper、LINQ to SQL classes、LINQ to SQL schema和Entity Framework
DAL等。

这就是说,为啥会如此也?这样使人,对于教授的话,不是坏费力吗?对弟子来说,其实也是分外伤脑筋的。

b)         提供部分因T4方面的VS的增添:当您安装后,在“Add New
Item”对话框中就会面多有一个命名为“Code
Generation”的品种,其中囊括多文本模板。

立马是盖,但凡能就此言语、文字交换的内容,都是建以互换两岸齐经历之上的,没有联手经历做基础,任何内容都是心有余而力不足展开人口以及人口以内联系的。

2、  T4 模板编辑器(eg:襄助代码着色、智能指示)

这种「心智实操」对于释迦摩尼佛的学子们吧,就缺乏这种与老师并的涉,所以,作为助教的释迦摩尼佛,既没有主意通过「语言」传授给学子,更未曾章程通过「身染」比划给学子看。

a)         tangible T4 Editor
(下载)

只得依照不同弟子之具体情状,在弟子本身苦苦研究、参悟的前提下,契合一些机遇,举行带、点化。

b)         Visual T4
(下载)

由此,释迦摩尼佛立摆的口舌,以及本我们看看底佛经,都是释迦摩尼佛在带、点化弟子认识真正的佛法,那几个讲话、这多少个经典,本身并无是法力。

    当然我们也足以通过VS2010饱受新增的恢弘管理器(Extension
Manager)来填补加Vs扩大插件。扩展管理器(Extension
Manager),那同Eclipse/Netbeans有些相似,用户可以直接在IDE中自Visual
Studio 库(Visual Studio
Gallery)
找到并下载扩大。通过VS的菜单Tools->Extension
Manager
,这里而可添加,删除已经安装的VS的壮大插件。打开界面如下:

当真的法力,作为民办教授无奈直接教,释迦摩尼佛涅槃前说自己从没说过法,就是以此道理。

 

师无奈间接教,作为学生为无可奈何直接学,只好靠悟。

 

哟是取暖?就是跨现有的学问,现有的晓,去取得一致栽过曾经发经历的重新认识。

笔者于求学 T4 的时刻用过地点四个 T4 模板编辑器。稍作几触及比较:

放学习佛经的角度来拘禁,学习佛经一定非克用好早已有的经验、知识、认识去明白佛经。这样的明白,永远都不能感悟到含有在佛经文字背后的法力,用佛教的传教若学会「破文字相」。

a)         tangible T4 Editor可摘安装内嵌的 UML 模板模型

实在使学会佛法,精力要花在「心智实操」上……

      

b)         对于无是常用的dll( eg:EnvDTE.dll ),tangible T4
Editor免费版以及 Visual T4 都未匡助导航,并且所报的指示页不同等

tangible T4 Editor免费版备受提醒如下:

 

 

Visual T4遇虽平素指示:

 

而在 Visual T4 中,我们得经以先后集中引入 EnvDTE.dll
解决这么些错误的提拔(完成开发后可移除程序集引用),并且还会周全的博该程序集的智能指示效用,如下图所示:

 

         同时我们呢得以看出 Visual T4 中代码着色也进一步贴近 VS
(紫色字体标明对象)。

小结:

  1. 就“代码着色”和“智能提示”方面Visual T4
    工具表现还完美(前提是得主动在列蒙引入对应程序集),但时风尚版本有缩进问题莫过于心痛,悲愤中等更新。.
  2. 或者你还惦念只要tangible T4 Editor提供的 UML
    模板模型,呵呵……现在我本机同服装了这有限悠悠
    T4编辑器,暂时还未曾察觉争论。

 

(二)T4基本结构

T4模板可以分成:指令块、文本块、控制块。

  1. 令块 –
    向文本模板化引擎提供有关咋样变化转换代码和输出文件之一般指令。
  2. 文本块 – 直接复制到输出的情。
  3. 支配块 –
    向文本插入可变值并决定文件的准绳依旧重新部件的程序代码,不克以控制块被嵌套控制块。

n  指令块

6个指令<#@ template #>、<#@ parameter#>、<#@
assembly #>、<#@ import #>、<#@ include #>、<#@
output #>、

中间, output 和 assembly 只好用在规划时模板。

1)         T4 模板指令

<#@ template [language=”C#”] [hostspecific=”true”]
[debug=”true”] [culture=”code”] [inherits=”templateBaseClass”]
[compilerOptions=”options”]#>

这里只表明下 inherits 属性,其它属性在本文更适用的地点发拓展验证。

inherits             

点超模板的程序代码继承自另一个类似,该基类可以是由于其他模板生成。

1)         运行时(预处理了之)文本模板被的持续

设未点名 inherits 特性,则会由你的文书模板生成基类和派生类。指定
inherits 特性时,仅生成派生类。

2)         设计时文本模板被之持续

计划时模板会生成任何项目标“文本文件”,此文件拿做 Visual Studio
项目之同一有些。T4
模板引擎首先要拿模板转换为中程序代码文件,中间代码文件拿写副您的
%TEMP% (环境变量) 目录。默认该生成的中间代码继承自
Microsoft.VisualStudio.TextTemplating.TextTransformation
类,但若吧可按照需要下 inherits 特性指定派生于 TextTransformation
类的此外基类。

                  
模板引擎生成转换类更详细的求参考本文前边的啥时候编译,编译过程 节。

 

2)         T4 参数指令

<#@ parameter type=”Full.TypeName” name=”ParameterName” #>

以 Visual Studio 文本模板被,parameter
指令注明模板代码中自自外部上下文传入的值开端化的特性。可以阐明任何远程类型的参数。也就是说,类型必须动SerializableAttribute举办宣示,或者必须由马尔斯(Mars)halByRefObject派生。这样可将参数值传递及在内部拍卖模板的AppDomain中。

怎使用以及内部运转体制请查看自己的别样一样篇稿子
《(译)理解T4
模板:<#@ parameter #>
指令》

 

3)         T4 导入指令

<#@ import namespace=”namespace” #>

 

4)         T4 包含指令

<#@ include file=”filePath” #>

a)         为了多代码的可维护性,将公用函数开吗接近功用块(<#+
类效率决定块 #>)存放于单独的文件中,该公文能够于
<#@include#> 到一个要多单模板文件被。

b)         对于富含文件,文件扩张名以
.ttinclude可读性更好。(以分别后缀为 .tt的运行时依旧设计时文本模板)

 

5)         T4 输出指令

<#@ output extension=”.fileNameExtension” [encoding=”encoding”]
#>

运转时(预处理)文本模板被不需要 output
指令。应用程序通过调用TextTransform() 来赢得已成形的字符串。

 

6)         T4 程序集指令

<#@ assembly name=”[assembly strong name|assembly file name]”
#>

以优先处理公事模板被,assembly 指令无效。改吗在 Visual Studio
项目遭到一直“添加引用”。

先后集名称应为以下各种之一:

  1. GAC 中程序集的强名称,例如 System.Xml.dll。还得选取长称,例如
    name=”System.Xml, Version=4.0.0.0,
    Culture=neutral,PublicKeyToken=b77……”。
  2. 次集的相对路径

可行使 $(variableName) 语法引用 Visual Studio 或MSBuild变量(如
$(SolutionDir)),以及利用 %VariableName% 来引用环境变量。

                   另,给来一部分常用之
【生成命令和性质之巨大】.aspx)

$(ConfigurationName)

当前项目配置的名称(如“Debug”)。

$(PlatformName)

当前项目平台的名称(如“Win32”)。

$(ProjectName)

项目的基本名称。

$(TargetDir)

生成的主输出文件的目录(定义为驱动器 + 路径);包括尾部的反斜杠“\”。

$(TargetName)

生成的主输出文件的基本名称。

$(FrameworkDir)

安装 .NET Framework 的目录。

$(FrameworkVersion)

Visual Studio 使用的 .NET Framework 版本。

$(WebDeployPath)

从 Web 部署根到项目输出所属于的位置的相对路径。返回与RelativePath相同的值。

$(WebDeployRoot)

指向<localhost>位置的绝对路径。例如,c:\inetpub\wwwroot。

 

n  控制块

有两种植档次的控制块,遵照这左括号对它举办区分:

1.      <# 标准控制块 #>                           
可以涵盖语句。

2.      <#= 表达式控制块 #>           
将一个可算也字符串的发表式括起来,用于供要描写副“输出”文件的字符串的代码。

3.      <#+ 类效率决定块 #>           
可以使类似功效决定块向文本模板上加计、属性、字段甚至是嵌套类。必须作为文件中之末梢一个块突显,或者用<#@
include #>引入外部文件。

注意:

1)         始终用
{…}花括号来含有内嵌的嵌套语句,否则会报错。(哪怕花括号被只有出相同词代码)

2)        
控制块不克互相嵌套。必须事先歇前的控制块,然后才会打开另一个。

 

(三)设计时模板与运作时模板

T4文本模板分为:设计时模板与运行时模板

n  添加模板

  1. 筹时模板(文本模板)

优势:当求变动时,可以遵照工作要求调整模型(输入),依照指定规则以“模型”生成任何类型的“文本文件”,例如:网页、资源文件要外语言的程序源代码。(模型:是描述应用程序特定地方的数据源。它好是另形式、任何类型的公文要数据库。如:数据库、配置文件、UML
模型、DSL 模型或其他源)

a)         VS中新建文件——常规——文本模板。(如图)

 

拖欠模板文件中早已带有下列指令:

<#@ template debug=”false” hostspecific=”false” language=”C#”
#>

<#@ output extension=”.txt” #>

b)        
或尽管,添加“纯文本文件”并安装下图属性,插足系指令。(后缀推荐改也正式的
*.tt)

规划时模板: TextTemplatingFileGenerator

 

  1. 运作时模板(已先期处理的文书模板)   

优势:当需求转变时,可以依照业务需求调整模型(输入),在运转时以指定规则以“模型”生成为“文本字符串”。

  1. VS中新建文件——常规——已先行处理的公文模板。

欠模板文件包含指令:<#@ template language=”C#” #>

  1. 或则,添加“纯文本文件”并设置相应属性,参加系指令。

运转时模板:TextTemplatingFilePreprocessor

 

n  啥时候编译,编译过程

  1. 什么时候编译

以下列任何一样种植情景下,将执模板,同时转附属文件,生成的公文将用作项目之一致部分编译。(属性框—-生成操作:编译)

1)         编辑模板(模板来异动且无吃保留),当前编写模板失去要旨。

2)         保存模板。

3)        
在“解决方案资源管理器”工具栏中单击“转换所有模板”。转换解决方案中之具有模板。

     

4)        
右打“解决方案资源管理器”中的一个要么三只模板文件,然后采用“运行从定义工具”。

  1. 编译过程

筹时模板

1)        
文本模板转换引擎将“文本模板”转换为可尽之cs代码——“转换类”。转换类(*.cs)存于临时目录下。(临时目录在“环境变量”中设置:右键“我之微处理器”—“属性”—“高级系统安装”—“高级”选项卡中“环境变量”—TEMP变量)

取名空间:Microsoft.VisualStudio.TextTemplating + 随机码

基类:Microsoft.VisualStudio.TextTemplating.TextTransformation

类名:GeneratedTextTransformation

 

2)        
引擎编译生成的“转换类”生成dll,dll存于临时目录下。具体是谁dll可以在模板的“调试环境”下下System.Reflection.Assembly.GetExecutingAssembly();获取。

3)        
执行业已编译的转换类,生成“文件”。新文件会当“解决方案资源管理器”中出现于文件模板文件下。

 

运作时模板

1)         运行时模板没有<#@ output
#>指令,文本模板引擎将“运行时模板”直接编译为cs文件,作为项目标同等有的编译。新文件会以“解决方案资源管理器”中冒出在文件模板文件下。

取名空间:默认为所属程序集的命名空间

基类:模板文件名 + Base 

类名:模板文件称(PreTextTemplateTest.tt)——注意是“分部类”

 

2)        
生成的代码文件就项目一道编译,并可在应用程序中经调用生成类中之TransformText()方法输出“文本字符串”。

 

除此以外,若要于一定命名空间受到放置模板转换生成的类,需安装模板文件之“自定义工具命名空间”属性。

 

  1. 注意事项

1)         控制块使用陷进

TransformText()方法是由于模板引擎将模板被之持有“控制块”代码(包括“包含的模版”)组合生成。所以当运控制块常应注意以下几点:

a)         语言:只能用相同种植语言。

b)         局部变量:确保有变量的称呼不碰面冲。

2)         文本模板在独的AppDomain中运作

求留心,文本模板在跟主应用程序分开的AppDomain中运作。在大部分情况下就并无重大,但以某些复杂的状下你或许会合发现部分限制。例如,假设只要于单身的劳动以数据传模板或从中传出数,则该服务要提供可连串化的
API。

 

(四)技巧

l  神速编写模板

因为老成文件呢原型,然后逐渐插入用于转移结果的控制块。

 

l  T4文件模板的断点调试

  1. 注册表:设置DbgJITDebugLaunchSetting值为 2。

(x86系统): HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework

(x64 系统):
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework

  1. 为template指令添加debug=”true”特性:<#@ template
    debug=”true”#>

    1. 命令:

<# System.Diagnostics.Debugger.Launch();#>                 
在模板执行到特定点起步调试器。倘使就此Debugger.Break()启动调试器在调节了晚会招致
VS 奔溃。

<#System.Diagnostics.Debugger.Break();#>                    
启动调试器后,使用是命令在延续特定点处再一次进入调试情势,相当给断点。

运模式:必须用“Debugger.Launch()”命令启动调试器(如下图,启动新实例或下已在的VS附加。注意,若此点击撤除则用闭馆时IDE),调试完毕后可不要中断调试,不影响模板编辑,当又编译模板时即使在“Debugger.Break()”命令则自动进入调试形式。

 

 

l  于模板传递参数的片种植方法

  1. 使用 <#@ parameter#>
    指令引入参数,由模板引擎生成属性访问代码。详细请看
    《(译)理解T4
    模板:<#@ parameter #>
    指令》
  2. 当构造函数中传递参数。只适用于运作时模板,此种植模板生成的代码以分割品种的样式编写。可以以类型的外一个文件被创建同一个好像的另一些,该文件可以涵盖一个带来参数的构造函数、若干性和函数,在调用
    TransformText() 实例方法前进展起首化。

 

l  用模板继承共享内容

可以通过编制基类模板(可以是抽象模板)在文件模板之间共享内容。使用<@#template#>
指令的 inherits 特性指定基类。

 

l  运行时调用设计时模板重临字符串

调用 Microsoft.VisualStudio.TextTemplating.Engine 的 ProcessTemplate
方法。

publicstring ProcessTemplate(

     string content,

     ITextTemplatingEngineHost host

)

        content    参数指定文本模板的情,eg:
使用System.IO.File.ReadAllText(Path) 举办读取

host        参数指定的宿主,必须是实现 ITextTemplatingEngineHost
的切近。这是由模板引擎回调的。宿主必须可以记录错误、解析对程序集和含有文件之援、提供可在中间举办模板的应用程序域并也各类条指令调用相应的电脑。

 

排练:创设于定义文本模板宿主

 

(五)常用方法

n  模板基类提供的措施

统筹时模板继承TextTransformation抽象类

 

 

运作时模板默认继承自动生成的基类

 

  1. Write() 和WriteLine() 方法

形容入目的出口文本的老两种植艺术:

a)         文本块

b)         表明式控制块:      <#= 变量 #>

c)         标准控制块:           <# Write() | WriteLine()
#>,因为控制块不克嵌套,所以这种办法比<#= 变量
#>书写更优雅。

  1. 输出文本缩进设置

足动用缩进方法设置文本模板输出的格式。

a)         PushIndent(string indent)        
添加指定格式,内部会以字符长度在到缓存变量indentLengths列表(List<int>)。

b)         PopIndent()                
以“堆栈(先进后出)”格局移除格式,内部以indentLengths列表中存的字符长度举办移除。

c)         ClearIndent()              删除所有缩进。

专注:格式用了晚一旦留意排除,否则可能出现模板被之空行会转
Write(“\r\n”) 中间代码,最终致将缩进的格式错误输出及了目的文件。

Eg:

 

  1. 错误报告

而一旦在 Visual Studio
错误窗口中放置错误消息及警戒信息,可以选择以下模式:

<# this.Error(“An error message”); #>

<# Warning(“A warning message”); #>

 

n  以举办模板的主机(例如 Visual
Studio)公开之点子及性质。这适用于健康文本模板,而不是先行处理了之文书模板。

率先,给 template 指令添加hostspecific=”true”
特性,以便利用this.Host对象。

(Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost)接口提供方

 

  1. 动用this.Host.ResolvePath()从相对路径名辟文件
  2. 以LogErrors() 展现错误音讯,如下图:

      

  1. 拔取 Visual Studio 中提供的服务(加载EnvDTE.dll )

EnvDTE是組件包裝 COM 程式庫,其中含有了 Visual Studio 核心 Automation
的物件和成員。

引入 EnvDTE.dll 组件后应随下图“属性”举行设置:

 

示例:

<#@ assembly name=”EnvDTE” #>

<#

IServiceProvider serviceProvider = (IServiceProvider)this.Host;

EnvDTE.DTEdte = (EnvDTE.DTE)
serviceProvider.GetService(typeof(EnvDTE.DTE));

dte.Solution.SaveAs(“C:\\backup_Solution”);

#>

 

          好了,有矣地点的争持后,我懂你精晓了。

科学,大家还紧缺一首用。接下我会收拾一首应用T4由过去之底色数据库操作:(1)按照表生成
CRUD sql语句以转变到类。(2)依照从定义的sql配置文件生成到类  
(3)还有……(看到后面来园友写了,不过自己或挂念遍,看有无发出新收获) 
—- 示例假使您发出更好的指出要告知自己

作者:滴答的冰暴            
出处:http://www.cnblogs.com/heyuquan/
本文版权归作者和果壳网共有,欢迎转载,但未经作者同意要保留这个段子声明,且以著作页面明显地方于来原文连接,否则保留追究法律责任的权。           

 

分类: C#.Net 篇

留下评论