2

我使用 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”返回空字符串。转换将不会运行。

那么问题出在哪里?你有什么建议这样做?

4

2 回答 2

5

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

于 2012-12-12T20:10:18.330 回答
0

这通常意味着找不到该文件。是general.tt在不同的路径create.tt

于 2012-12-12T11:41:38.013 回答