将所有方法放在一个.tt文件中,并在MVC的CodeTemplates中的另一个t4文件中使用它

时间:2012-12-12 10:53:04

标签: asp.net-mvc asp.net-mvc-3 t4

我使用ASP.NET MVC 3 Custom CodeTemplates我需要在一个t4文件中放入一些方法,然后在我的所有t4模板中使用它。

所以这是我的general.tt文件:

<#@ template language="C#" #>
<#@ assembly name="System" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.ComponentModel.DataAnnotations" #>
<#@ assembly name="System.Data" #>
<#@ assembly name="System.Data.Entity" #>
<#@ assembly name="System.Data.Linq" #>
<#@ assembly name="System.Xml.Linq" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.ComponentModel.DataAnnotations" #>
<#@ import namespace="System.ComponentModel" #>
<#@ import namespace="System.Data.Linq.Mapping" #>
<#@ import namespace="System.Data.Objects.DataClasses" #>
<#@ import namespace="System.Reflection" #>
<#@ import namespace="Microsoft.VisualStudio.Web.Mvc.Scaffolding.BuiltIn" #>

<#+ 
public class XXD {
    public string getitNow(){
        return "Yup thats it!";
    }
}
 #>

然后我在create.tt文件中使用它,如下所示:

<#@ include file="general.tt" #>

...

<#+

private string GetitNow(){
   XXD xx = new XXD();
   return xx.getitNow();
}

但是当我想添加视图使用创建模板时出现错误:

错误:加载包含的文件'general.tt'返回null或空字符串。转型将不会进行。

问题出在哪里?你有什么建议吗?

2 个答案:

答案 0 :(得分:5)

上次我检查过时,MVC脚手架仍然使用了ITextTemplatingEngineHost的自定义实现,它实现了include指令,与Visual Studio中的ITextTemplating服务不同。我建议您提交Connect错误,描述您遇到的问题,并要求将MVC中的T4实现更改为内置的ITextTemplating服务,该服务没有此限制和其他限制。

答案 1 :(得分:0)

这通常意味着找不到该文件。 general.ttcreate.tt的路径不同吗?