<#= #> 的含义是什么?

5

阅读代码生成和T4文本模板,我发现这个语法 <#= DateTime.Now #>

。此语法用于在T4模板中插入当前日期和时间。

<html><body>
 The date and time now is: <#= DateTime.Now #>
</body></html>

<%= DateTime.Now %><%# DateTime.Now %>有何区别?谷歌搜索没有显示相关内容。

阅读文档后,发现所有的 <% %> 语法都非常相似。 - codingbiz
在 T4 文本生成期间,<#=DateTime.Now#> 会被计算并写入输出结果。据我所知,<%= %> 对于 T4 引擎来说没有任何意义,只是按原样写入。 - Just another metaprogrammer
@FuleSnabel 我不知道其中的区别,我是T4新手,以为这是表达式在asp.net中的另一种写法。对我来说只是有些奇怪。 - codingbiz
1个回答

4
我并不是非常熟悉T4文本模板,但似乎区别在于设计/生成时间代码生成(可以包括可执行语句)和运行时代码执行。
因此,<#= #> 在模板中评估表达式以生成文件。
<%= %> 执行块内的代码并将其写入输出流。这将在页面首次执行时进行JIT编译,但重点是它表示要在页面运行时执行的代码块,而不是在模板文件生成期间执行。
第三种形式<%# %> 表示数据绑定表达式,在页面执行时也会被评估。
引用:
表达式控制块
表达式控制块评估表达式并将其转换为字符串。这将插入到输出文件中。
表达式控制块由符号<#= ... #>界定
例如,以下控制块使输出文件包含“5”: <#= 2 + 3 #> 来源:http://msdn.microsoft.com/en-us/library/bb126478

你是指 <#= 2 + 3 #><%= 2 + 3 %> 是一样的吗? - codingbiz
2
输出的最终结果相同,但评估发生的时间不同。<#= 2+3会在生成文件时执行,因此您生成的文件中将有“5”。<%= 2+3将在运行ASP.Net页面时执行。 - Tim M.
例如,这将是在构建代码时插入时间戳与每次执行页面时评估当前日期之间的区别。 - Tim M.
非常出色的回答。阅读文档后,发现所有 <% %> 的语法都非常相似。 - codingbiz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接