两个自定义工具用于单个文件?

时间:2011-05-16 10:31:33

标签: t4 customtool

我想从我的dbml(Linq to Sql)文件生成一些代码,dbml文件放在我的项目的很多部分所以我为此目的编写了一个自定义工具

但问题是dbml已经包含了MSLinqToSQLGenerator自定义工具,

那么你知道如何为一个文件设置两个自定义工具吗?如果没有,请告诉我你的想法

2 个答案:

答案 0 :(得分:2)

Visual Studio每个文件只支持一个“自定义工具”,但您可以添加预编译步骤以针对您想要的任何内容运行其他工具。例如,我在我的一个项目的“构建事件”选项卡上设置了以下预编译步骤。

"$(DevEnvDir)..\..\..\Common Files\Microsoft Shared\TextTemplating\10.0\TextTransform" "$(ProjectDir)DataContext\Northwind.proxy.tt"

为了找到T4命令行工具,这里有很多相对路径,但你明白了。这个特定的T4文件依赖于它所读取的.dbml文件所在的目录,以生成其输出。

在编译项目之前,您可以运行所需的任何外部工具。只需确保在第一次运行后,在项目中包含工具的输出。之后,由于文件在PRE编译步骤中被更改,因此它将始终在每个构建中更新。

答案 1 :(得分:2)

如果在模板的职责范围内包含LINQ to SQL T4生成器,则可以对T4进行适当的控制。

如果我理解正确,你想保留.dbml生成器的默认行为,但也要添加自己的行为。

这看起来有些“旧”,我个人并没有亲自使用LINQ to SQL,但我确实使用了这个替代T4生成器,它产生了相当于标准的.dbml生成器。 / p>

https://github.com/damieng/L2ST4

不确定这是否与VS 2010版本保持同步,但您始终可以比较标准.dbml生成的代码和此T4输出,并进行适当的更改以实现相同的结果。

当然,您可以简单地使用多个不同的生成器,只需使用“转换所有模板”运行它们,但根据您的问题,您希望将生成器附加到特定于文件的自定义工具。

你可能想要查看(除非它已经熟悉),T4 Toolbox https://github.com/olegsych/T4Toolbox将“T4ScriptFileGenerator”自定义工具添加到文件中。它在文件更改时有效地运行T4代码。