我一直在努力
编译转换:已导入具有相同标识“xxxx”的程序集。尝试删除其中一个重复的引用。
使用T4在设计时生成一些代码 - 将几个不同的可重用模板保存为.ttinclude文件,并在许多不同的“父”模板中共享。
当我删除其中一个引用(在我自己的ttinclude文件中)时,我在这个和替代方案之间切换,这是:
编译转换:找不到类型或命名空间名称'yyy'(您是否缺少using指令或程序集引用?)
围绕圈子,任何想法?
答案 0 :(得分:5)
好吧,发现了一个肮脏的解决方法。
如果有人有建议,会喜欢更好的解决方案吗?
发布我的流程可能对其他人有帮助。
使用模板指令来放置我的模板和include 模板进入调试模式,例如
<#@ template language =“C#” debug =“true” hostspecific =“true”#>
弹出%TEMP%以查看生成的文件(最近 在获得编译转换错误之后。
搜索所使用的缺失/加倍装配/类别。 发现哪些“包含”模板都具有相同的参考,例如
<#@ include file =“MyHelperTemplate.ttinclude”#>
和:
< #@ include file =“EF.Utility.CS.ttinclude”#>
打开非自定义包含的include文件夹 导致与我自己的冲突
.. \ Common7 \ IDE \ Extensions \ Microsoft \ Entity Framework Tools \ Templates \ Includes
打开此文件,删除了麻烦的导入
< #@ import namespace =“EnvDTE”#>
在同一文件夹中使用新名称保存,并更新引用以指向此新版本,例如
<#@ include file =“EF.Utility.CS.Custom.ttinclude”#>
将所需的导入放入“父”模板中,然后从中删除 “包含”模板。就我而言,这是:
< #@ import namespace =“EnvDTE”#>
现在它运行正常,没有任何问题,没有重复的导入,并且正确引用了所有必需的程序集。
我确信有一种更复杂的方法来处理T4代码重用,完全否定了这个问题。我最初尝试导入我自己的自定义程序集,并为模板提供帮助程序,但当我尝试构建自定义类库时,看起来像锁定dll的经典问题。
似乎T4 Toolbox有VolatileAssembly Custom Directive的解决方案,并且很受欢迎,但对于我相当简单的需求看起来有点过分。也许当我有更多时间。