首页 新闻 搜索 专区 学院

VS2012里使用T4模版出现的一个问题

0
悬赏园豆:5 [已关闭问题] 关闭于 2014-02-08 17:57

(1)在VS2012(旗舰版),使用了T4模版,出现下图的警告,请问是什么情况?

(2)“请使用‘添加新的生成项’以添加更新的模版”这个具体是在哪里添加,是否添加之后就可以解决这个问题?

行进的主页 行进 | 初学一级 | 园豆:105
提问于:2013-12-16 09:50
< >
分享
所有回答(1)
0

1,应该是你的 .tt 文件同你的 vs2012 当前使用的 t3 模板不匹配,你应该对比下版本号,然后安装正确版本的 t4 模板库。

2,就是用当前安装的 t4 模板重新生成 .tt 文件。

Launcher | 园豆:45045 (高人七级) | 2013-12-16 10:02

装的是最新版的了

支持(0) 反对(0) 行进 | 园豆:105 (初学一级) | 2013-12-16 10:43

@越过: 你的 IService.tt 是用这个最新生成的吗?

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2013-12-16 10:48

@Launcher: 

不管是直接在常规里添加模版文件,或者是用tangible T4,保存后都有这个警告

支持(0) 反对(0) 行进 | 园豆:105 (初学一级) | 2013-12-16 10:55

@越过: 是添加的模板就有这个警告,还是添加后你增加了脚本,才有警告?

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2013-12-16 11:12

@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 }
支持(0) 反对(0) 行进 | 园豆:105 (初学一级) | 2013-12-16 11:17

@越过: 你在“错误列表”里,双击警告信息,它会定位到你的脚本。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2013-12-16 11:25

@Launcher: 仅仅只是定位到这里

支持(0) 反对(0) 行进 | 园豆:105 (初学一级) | 2013-12-16 11:30

@越过: 你这样,你新添加一个 Blank T4 Template,不添加你的脚本,保存,看有没有警告,然后逐渐的增加你的脚本。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2013-12-16 11:34

@Launcher: 

EdmItemCollection ItemCollection=loader.CreateEdmItemCollection(inputFile);

加到这一句就出现了警告。是否会是因为这两个引用的问题引起的?

 

支持(0) 反对(0) 行进 | 园豆:105 (初学一级) | 2013-12-16 11:53

@Launcher: 额····················,那个问题还是在,文件的路径是没问题的,或者你的意思参考edmx里面自动生成的tt文件?

支持(0) 反对(0) 行进 | 园豆:105 (初学一级) | 2013-12-16 13:52

@越过: 你按照他的方式试试,注意什么文件放什么项目里跟他的一致。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2013-12-16 14:04

@Launcher: 步骤是一致的,我也是先建的edmx,由edmx自动生成的tt文件,是没问题的。我在DAL层新建了一个tt文件模版却有问题。

支持(0) 反对(0) 行进 | 园豆:105 (初学一级) | 2013-12-16 14:14

@越过: 你要是把上面这个这个正确的脚本拷贝到你新建的文件,会有问题吗?上面这个也跟你新建的一样是在 DAL 层中吗?

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2013-12-16 14:34

@Launcher: 在DAL层新建一个TT文件,然后把内容拷过去,保存后没有提示警告:

支持(0) 反对(0) 行进 | 园豆:105 (初学一级) | 2013-12-16 15:59

@越过: 和你的有警告的比较下差异吧。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2013-12-16 16:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册