(1)在VS2012(旗舰版),使用了T4模版,出现下图的警告,请问是什么情况?
(2)“请使用‘添加新的生成项’以添加更新的模版”这个具体是在哪里添加,是否添加之后就可以解决这个问题?
1,应该是你的 .tt 文件同你的 vs2012 当前使用的 t3 模板不匹配,你应该对比下版本号,然后安装正确版本的 t4 模板库。
2,就是用当前安装的 t4 模板重新生成 .tt 文件。
装的是最新版的了
@越过: 你的 IService.tt 是用这个最新生成的吗?
@Launcher:
不管是直接在常规里添加模版文件,或者是用tangible T4,保存后都有这个警告
@越过: 是添加的模板就有这个警告,还是添加后你增加了脚本,才有警告?
@Launcher:
是添加后,增加了脚本,然后保存时提示这个警告,代码如下,刚接触T4,不是很清楚,会是命名空间的问题?
1 <#@ template debug="false" hostspecific="true" language="C#" #> 2 3 <#@ include file="EF.Utility.CS.ttinclude"#> //引进TT模版的命名空间 4 5 <#@ output extension=".cs" #> 6 7 <# CodeGenerationTools code=new CodeGenerationTools(this); 8 9 MetadataLoader loader=new MetadataLoader(this); 10 11 CodeRegion region=new CodeRegion(this,1); 12 13 MetadataTools ef=new MetadataTools(this); 14 string inputFile=@"..\\LYZJ.UserLimiterMVC.Model\\DataModel1edmx.edmx"; 15 16 EdmItemCollection ItemCollection=loader.CreateEdmItemCollection(inputFile); 17 18 string namespaceName=code.VsNamespaceSuggestion(); 19 20 EntityFrameworkTemplateFileManager fileManager=EntityFrameworkTemplateFileManager.Create(this); 21 22 #> 23 24 //使用TT模版生成代码的片段 25 using System; 26 using System.Collections.Generic; 27 using System.Linq; 28 using System.Text; 29 using System.Threading.Tasks; 30 31 using LYZJ.UserLimiterMVC.Model; 32 using LYZJ.UserLimiterMVC.IDAL; 33 34 namespace LYZJ.UserLimiterMVC.DAL 35 { 36 37 //在这里需要一个for循环来遍历数据库中所有的表放置在下面即可,这样就实现了所有的表对应的仓储显示出来了。 38 39 <# 40 41 //使用foreach循环遍历ItemCollection.GetItems<EntityType>集合 42 43 foreach(EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e=>e.Name)) 44 {#> 45 46 public partial class <#=entity.Name#>Repository:BaseRepository<<#=entity.Name#>>,I<#=entity.Name#>Repository 47 { 48 49 } 50 <#}#> 51 }
@越过: 你在“错误列表”里,双击警告信息,它会定位到你的脚本。
@Launcher: 仅仅只是定位到这里
@越过: 你这样,你新添加一个 Blank T4 Template,不添加你的脚本,保存,看有没有警告,然后逐渐的增加你的脚本。
@Launcher:
EdmItemCollection ItemCollection=loader.CreateEdmItemCollection(inputFile);
加到这一句就出现了警告。是否会是因为这两个引用的问题引起的?
@Launcher: 额····················,那个问题还是在,文件的路径是没问题的,或者你的意思参考edmx里面自动生成的tt文件?
@越过: 你按照他的方式试试,注意什么文件放什么项目里跟他的一致。
@Launcher: 步骤是一致的,我也是先建的edmx,由edmx自动生成的tt文件,是没问题的。我在DAL层新建了一个tt文件模版却有问题。
@越过: 你要是把上面这个这个正确的脚本拷贝到你新建的文件,会有问题吗?上面这个也跟你新建的一样是在 DAL 层中吗?
@Launcher: 在DAL层新建一个TT文件,然后把内容拷过去,保存后没有提示警告:
@越过: 和你的有警告的比较下差异吧。