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

Sae*_*eid 2 asp.net-mvc t4 asp.net-mvc-3

我使用ASP.NET MVC 3 自定义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!";
    }
}
 #>
Run Code Online (Sandbox Code Playgroud)

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

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

...

<#+

private string GetitNow(){
   XXD xx = new XXD();
   return xx.getitNow();
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ole*_*ych 5

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