tags:

views:

1072

answers:

1

I am using T4 to generate some screens and middle-tier code for a project, and would like to use Linq to simplify some of my template code. However, when I try to use Linq, the template reports a syntax error.

+21  A: 

By default (and as used in most online examples) the template is compiled with the 2.0 Framework, which does not include Linq. (See MSDN forum thread)

To solve the problem, three steps are needed:

  1. In your template's language attribute, specify "C#v3.5" or "VBv3.5"
  2. Add an assembly directive for System.Core.dll
  3. Import the System.Linq namespace

Your template will now look something like this:

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

You can now use Linq and other new language features in your template.

GalacticCowboy
I had to use <#@ assembly name="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" #> to get the 3.5 version of System.Core.dll.
Lance Fisher
By chance, was the "containing" project a 2.0/3.0 project? That may explain why it didn't know how to find System.Core without the fully-qualified name.
GalacticCowboy
This worked for me after I changed the language from `C#` to `C#v3.5`. Thanks! Weird how the intellisense didn't show this as an option!
Dan Atkinson