如何在T4模板中使用Linq?


68

我正在使用T4为项目生成一些屏幕和中间层代码,并且希望使用Linq来简化我的一些模板代码。但是,当我尝试使用Linq时,模板会报告语法错误。

Answers:


98

默认情况下,在Visual Studio 2008中(和大多数在线示例中所使用的一样),该模板是使用2.0框架编译的,该框架不包含Linq。(请参阅MSDN论坛主题

要解决此问题,需要三个步骤:

  1. 在模板的语言属性中,指定“ C#v3.5”或“ VBv3.5”-VS2010不需要此步骤,因为VS2010始终使用.Net 4.0。
  2. 为System.Core.dll添加一个程序集指令
  3. 导入System.Linq命名空间

您的模板现在将如下所示:

<#@ template language="C#v3.5" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>

现在,您可以在模板中使用Linq和其他新语言功能。


我必须使用<#@程序集名称=“ System.Core,版本= 3.5.0.0,文化=中性,PublicKeyToken = b77a5c561934e089”#>才能获得System.Core.dll的3.5版本。
Lance Fisher

偶然地,“包含”项目是2.0 / 3.0项目吗?这可能可以解释为什么没有完全限定的名称就不知道如何找到System.Core。
GalacticCowboy

这为我工作后,我从改变语言C#C#v3.5。谢谢!奇怪的是,智能感知没有将其显示为选项!
丹·阿特金森

@ user1007074你的意思是?这个问题可以追溯到私人测试版(或可能是第一个公共测试版)。我敢肯定,如果您看上去很努力,就会发现很多“有趣”的东西可以用来评论那个时代。
GalacticCowboy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.