首页新闻找找看学习计划

使用T4模板碰到的诡异问题(代码无问题,调试通过,保存运行时编译器报错)

0
悬赏园豆:20 [已解决问题] 解决于 2015-03-01 22:43

详见下面链接:

http://stackoverflow.com/questions/28209868/t4-template-debugging-without-error-when-save-an-error

T4
问题补充:

貌似stackoverflow的cdn脚本被墙了,我在这里再发一次吧。

如链接中的具体信息所示:

  1. 代码链接为:https://github.com/magicodes/Magicodes.NET/blob/master/Plus/Magicodes.Admin/Controllers/SiteAdminNavigationsController.cs.t4
  2. 报错行为:var MVCGenerateParams=new T4MVCGenerateInfo<SiteAdminNavigation,AdminContext>();
  3. 在创建对象传递类型时报错,错误为:参数“AdminContext”与类型参数“TDbContext”的约束冲突
  4. 这个代码是生成控制器与列表View的。
  5. 具体异常为:错误 4 正在运行转换: System.TypeLoadException: “Microsoft.VisualStudio.TextTemplatingEB3B19F9ED2A1CD8FC4B21815C1AACB477DD055C49C5754AF0754E9D44596039EB9CA531F9F56BFB60B31D13311A2A84214359163B64F650FF3E2A2DDF6E869D.GeneratedTextTransformation+T4MVCGenerateInfo`2[TModel,TDbContext]”上的 GenericArguments[1] (“Magicodes.Admin.Models.AdminContext”)与类型参数“TDbContext”的约束冲突。 在 Microsoft.VisualStudio.TextTemplatingEB3B19F9ED2A1CD8FC4B21815C1AACB477DD055C49C5754AF0754E9D44596039EB9CA531F9F56BFB60B31D13311A2A84214359163B64F650FF3E2A2DDF6E869D.GeneratedTextTransformation.TransformText() 在 Microsoft.VisualStudio.TextTemplating.TransformationRunner.PerformTransformation() D:\CloudDriver\Git\Magicodes.NET\Plus\Magicodes.Admin\Controllers\SiteAdminNavigationsController.cs.t4 1 1 Magicodes.Admin
雪雁的主页 雪雁 | 初学一级 | 园豆:48
提问于:2015-01-29 18:09
< >
分享
最佳答案
0

需要更具体的信息,比如介绍下在用t4干什么,在那个具体代码点报错

收获园豆:20
arg | 小虾三级 |园豆:1047 | 2015-01-29 19:37

貌似stackoverflow的cdn脚本被墙了,我在这里再发一次吧。

如链接中的具体信息所示:

  1. 代码链接为:https://github.com/magicodes/Magicodes.NET/blob/master/Plus/Magicodes.Admin/Controllers/SiteAdminNavigationsController.cs.t4
  2. 报错行为:var MVCGenerateParams=new T4MVCGenerateInfo<SiteAdminNavigation,AdminContext>();
  3. 在创建对象传递类型时报错,错误为:参数“AdminContext”与类型参数“TDbContext”的约束冲突
  4. 这个代码是生成控制器与列表View的。
  5. 具体异常为:错误 4 正在运行转换: System.TypeLoadException: “Microsoft.VisualStudio.TextTemplatingEB3B19F9ED2A1CD8FC4B21815C1AACB477DD055C49C5754AF0754E9D44596039EB9CA531F9F56BFB60B31D13311A2A84214359163B64F650FF3E2A2DDF6E869D.GeneratedTextTransformation+T4MVCGenerateInfo`2[TModel,TDbContext]”上的 GenericArguments[1] (“Magicodes.Admin.Models.AdminContext”)与类型参数“TDbContext”的约束冲突。 在 Microsoft.VisualStudio.TextTemplatingEB3B19F9ED2A1CD8FC4B21815C1AACB477DD055C49C5754AF0754E9D44596039EB9CA531F9F56BFB60B31D13311A2A84214359163B64F650FF3E2A2DDF6E869D.GeneratedTextTransformation.TransformText() 在 Microsoft.VisualStudio.TextTemplating.TransformationRunner.PerformTransformation() D:\CloudDriver\Git\Magicodes.NET\Plus\Magicodes.Admin\Controllers\SiteAdminNavigationsController.cs.t4 1 1 Magicodes.Admin
雪雁 | 园豆:48 (初学一级) | 2015-01-29 22:04

@雪雁: 可能是依赖的dll路径和调试时不一样,试试写死路径看看。

这个链接的问题和你的情况很像

http://stackoverflow.com/questions/5735673/what-could-be-causing-a-system-typeloadexception-in-a-visual-studio-unit-test

arg | 园豆:1047 (小虾三级) | 2015-01-30 12:07

@arg: 谢谢你了。我晚上试试。理论上不大可能是路径的问题。

雪雁 | 园豆:48 (初学一级) | 2015-01-30 18:27

@arg: 谢谢你了。我晚上试试。理论上不大可能是路径的问题。

您给的链接很有价值,初步看了下,应该有点启发,晚上再细调下。3Q。

雪雁 | 园豆:48 (初学一级) | 2015-01-30 18:32

@雪雁: 希望早日找出问题,并分享出来。

从用t4的经验来看,由于大部分都要加载dll,并反射出类型定义,以前也多次遇到这类问题,我都是想把所有依赖dll加载一遍后,再执行自动生成功能。

arg | 园豆:1047 (小虾三级) | 2015-01-31 12:17

@雪雁: 我把所有引用的dll写死路径都试过,也不行。再考虑试试其他方式。另外老外建议我去T4官网发帖,也许我会试试。

雪雁 | 园豆:48 (初学一级) | 2015-01-31 18:27

@arg: 实际上我还试过加载所有的相关dll,但是还是报错。

雪雁 | 园豆:48 (初学一级) | 2015-01-31 18:30

各种方式试遍了,已经找到了一种解决方案:将类T4MVCGenerateInfo的定义代码从T4模板Imports.include.t4迁移至类库Magicodes.T4中,此问题解决!!妈蛋。之前的原因还是不知。晚些我会发一篇帖子的。太操蛋了。

雪雁 | 园豆:48 (初学一级) | 2015-02-01 16:48
其他回答(1)
0

我也感觉是T4运行时的dll和你自己dll引用的dll不一致造成的.

assiwe | 园豆:253 (菜鸟二级) | 2015-01-31 05:41

我把所有引用的dll写死路径都试过,也不行。再考虑试试其他方式。另外老外建议我去T4官网发帖,也许我会试试。

支持(0) 反对(0) 雪雁 | 园豆:48 (初学一级) | 2015-01-31 18:27

各种方式试遍了,已经找到了一种解决方案:将类T4MVCGenerateInfo的定义代码从T4模板Imports.include.t4迁移至类库Magicodes.T4中,此问题解决!!妈蛋。之前的原因还是不知。晚些我会发一篇帖子的。太操蛋了。

支持(0) 反对(0) 雪雁 | 园豆:48 (初学一级) | 2015-02-01 16:48

@雪雁: 嗯,以前我是把定义弄到另个dll里面的。t4模板的反射挺折磨人的

支持(0) 反对(0) arg | 园豆:1047 (小虾三级) | 2015-02-01 17:28

@arg: 太他妈蛋疼了,估计是Bug。

支持(0) 反对(0) 雪雁 | 园豆:48 (初学一级) | 2015-02-01 18:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册