T4“编译转换:已导入具有相同标识的程序集”。尝试删除其中一个重复的引用。“?

时间:2011-07-14 22:26:59

标签: visual-studio-2010 templates code-generation t4

我一直在努力

编译转换:已导入具有相同标识“xxxx”的程序集。尝试删除其中一个重复的引用。

使用T4在设计时生成一些代码 - 将几个不同的可重用模板保存为.ttinclude文件,并在许多不同的“父”模板中共享。

当我删除其中一个引用(在我自己的ttinclude文件中)时,我在这个和替代方案之间切换,这是:

编译转换:找不到类型或命名空间名称'yyy'(您是否缺少using指令或程序集引用?)

围绕圈子,任何想法?

1 个答案:

答案 0 :(得分:5)

好吧,发现了一个肮脏的解决方法。

如果有人有建议,会喜欢更好的解决方案吗?

发布我的流程可能对其他人有帮助。


  1. 使用模板指令来放置我的模板和include 模板进入调试模式,例如

    <#@ template language =“C#” debug =“true” hostspecific =“true”#>

  2. 弹出%TEMP%以查看生成的文件(最近 在获得编译转换错误之后。

  3. 搜索所使用的缺失/加倍装配/类别。 发现哪些“包含”模板都具有相同的参考,例如

    <#@ include file =“MyHelperTemplate.ttinclude”#>

    和:

    < #@ include file =“EF.Utility.CS.ttinclude”#>

  4. 打开非自定义包含的include文件夹 导致与我自己的冲突

    .. \ Common7 \ IDE \ Extensions \ Microsoft \ Entity Framework Tools \ Templates \ Includes

  5. 打开此文件,删除了麻烦的导入

    < #@ import namespace =“EnvDTE”#>

  6. 在同一文件夹中使用新名称保存,并更新引用以指向此新版本,例如

    <#@ include file =“EF.Utility.CS.Custom.ttinclude”#>

  7. 将所需的导入放入“父”模板中,然后从中删除 “包含”模板。就我而言,这是:

    < #@ import namespace =“EnvDTE”#>


  8. 现在它运行正常,没有任何问题,没有重复的导入,并且正确引用了所有必需的程序集。

    我确信有一种更复杂的方法来处理T4代码重用,完全否定了这个问题。我最初尝试导入我自己的自定义程序集,并为模板提供帮助程序,但当我尝试构建自定义类库时,看起来像锁定dll的经典问题。

    似乎T4 ToolboxVolatileAssembly Custom Directive的解决方案,并且很受欢迎,但对于我相当简单的需求看起来有点过分。也许当我有更多时间。