【发布时间】:2011-03-25 09:40:19
【问题描述】:
我正在开发我的第一个 T4 代码生成工具,以便将一些存储过程帮助程序代码添加到我的项目中。我创建了自定义类型(例如 StoredProcedure 和 StoredProcedureParameter 来帮助我生成代码,并在我的代码中包含了程序集和命名空间引用:
<#@ template debug="false" hostspecific="false" language="VB" #>
<#@ output extension=".generated.vb" #>
<#@ assembly name="$(TargetPath)" #>
<#@ import namespace="StoredProcCodeGenerator" #>
这允许我在我的 T4 模板代码中使用我的自定义类型。但是,因为我的自定义类型与 T4 模板代码存在于同一个项目中,所以在不重新启动 Visual Studio 的情况下运行模板代码后,我无法重新编译我的项目。这不是很有趣。
我阅读了great article,它通过使用 T4 工具箱解决了这个确切的问题,但它不起作用。要么我执行 VolatileAssembly 指令错误,要么根本没有安装 T4 工具箱。我不确定工具箱是否安装正确(我在 Win XP 上使用 VS 2010)。
有哪些方法可以解决这个问题?
【问题讨论】:
-
我不明白。在 VS2010 中,我一直使用 T4 模板,包括使用与模板在同一个项目中的类型,它工作得很好,并且每当我保存时都会重新运行模板——就像我所期望的那样。
-
@Kirk 我没有意识到在添加
<#@ VolatileAssembly ...之前我必须删除<#@ assembly name="$(TargetPath)" #>。我添加了一个答案来解释它。 -
有人可以在开头编辑标题以说模板而不是模板吗?
-
@马斯洛哈!很棒的收获。我可能已经从标题开始了 50 次,但从未注意到这一点。谢谢!
标签: c# .net vb.net code-generation t4