如何在VS2010中指定T4(文本模板)使用C# 4.0?

5
我需要指定我的 T4 使用 C# 4.0 来渲染我的 tt 文件吗?我尝试使用:
<#@ template language="C#v4.0" debug="true" #>

但是当我使用一个动态变量,像这样:
dynamic x=10;
Write(x.ToString());

我遇到了以下这些错误:
Error   2   Compiling transformation: Predefined type 'Microsoft.CSharp.RuntimeBinder.CSharpSetMemberBinder' is not defined or imported e:\projects\DynamicModel\DynamicModel\ModelGenerator.tt 1   1   
Error   3   Compiling transformation: Missing compiler required member 'Microsoft.CSharp.RuntimeBinder.CSharpInvokeMemberBinder..ctor'  e:\projects\DynamicModel\DynamicModel\ModelGenerator.tt 1   1   
Error   4   Compiling transformation: Missing compiler required member 'System.Runtime.CompilerServices.CallSite.Create'    e:\projects\DynamicModel\DynamicModel\ModelGenerator.tt 1   1   
Error   5   Compiling transformation: One or more types required to compile a dynamic expression cannot be found. Are you missing references to Microsoft.CSharp.dll and System.Core.dll?   e:\Projects\DynamicModel\DynamicModel\ModelGenerator.tt 7   8   
Error   6   A namespace cannot directly contain members such as fields or methods   e:\projects\DynamicModel\DynamicModel\ModelGenerator.cs 1   1   DynamicModel

另外,请注意我正在使用TextTemplatingFileGenerator,而不是预处理器模板。


你尝试过查看VS2010提供的模板吗? - Lazarus
只要不使用动态变量,它就可以正常运行。 - amazedsaint
2个回答

6

发现您还需要指定正确的程序集。

添加此内容可确保您正在使用C# 4.0。

<#@ template language="C#" debug="true" #>
<#@ output extension=".txt" #>
<#@ Assembly Name="System.Core, Version=4.0.0.0, Culture=neutral" #>
<#@ Assembly Name="Microsoft.CSharp, Version=4.0.0.0, Culture=neutral" #>

然而,在t4转换期间,由于某些原因,动态调度仍然无法从T4正常工作,不知道为什么。从T4中抛出运行时错误,但是相同的代码直接从cs文件中可以正常工作。


你尝试过使用预编译的T4吗?http://www.olegsych.com/2009/09/t4-preprocessed-text-templates/ - Pavel Minaev
顺便提一下,我正在使用自定义模板主机,而不是直接从VS运行t4 :) - amazedsaint

2

我认为默认情况下,T4引擎只能使用4.0版本,但我建议确保您引用的任何DLL都适用于您的错误。


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