【发布时间】:2011-08-26 08:13:51
【问题描述】:
我想从我的 dbml(Linq to Sql) 文件中生成一些代码,dbml 文件放置在我项目的许多部分中,所以我为此编写了一个自定义工具
但问题是dbml已经包含了MSLinqToSQLGenerator自定义工具,
那么你知道有什么方法可以为一个文件设置两个自定义工具吗?如果没有,请告诉我你的想法
【问题讨论】:
标签: t4 customtool
我想从我的 dbml(Linq to Sql) 文件中生成一些代码,dbml 文件放置在我项目的许多部分中,所以我为此编写了一个自定义工具
但问题是dbml已经包含了MSLinqToSQLGenerator自定义工具,
那么你知道有什么方法可以为一个文件设置两个自定义工具吗?如果没有,请告诉我你的想法
【问题讨论】:
标签: t4 customtool
Visual Studio 将仅支持每个文件一个“自定义工具”,但您可以添加一个预编译步骤来针对您想要的任何东西运行其他工具。例如,我在我的一个项目的“构建事件”选项卡上设置了以下预编译步骤。
"$(DevEnvDir)..\..\..\Common Files\Microsoft Shared\TextTemplating\10.0\TextTransform" "$(ProjectDir)DataContext\Northwind.proxy.tt"
为了找到 T4 命令行工具,这里有很多相对路径,但你明白了。这个特定的 T4 文件依赖于与它读取以生成其输出的 .dbml 文件位于同一目录中。
在编译项目之前,您可以运行任何您想要的外部工具。只需确保在第一次运行后,将工具的输出包含在项目中即可。在那之后,由于文件在预编译步骤中被更改,所以它总是会在每次构建中更新。
【讨论】:
如果您在模板的职责中包含 LINQ to SQL T4 生成器,您将获得对 T4 的适当控制。
如果我理解正确,您希望保留 .dbml 生成器的默认行为,但还要添加您自己的。
这似乎有点“旧”,而且我已经有一段时间没有亲自使用 LINQ to SQL,但我确实使用了 T4 生成器的原样替换,它产生了与标准 .dbml 生成器相当的东西。
https://github.com/damieng/L2ST4
不确定这是否与 VS 2010 版本是最新的,但您始终可以比较标准 .dbml 生成的代码和此 T4 输出,并进行适当的更改以获得相同的结果。
当然,您可以简单地拥有多个不同的生成器,并简单地使用“转换所有模板”运行它们,但根据您的问题,您希望将生成器附加到特定于文件的自定义工具。
您可能还想查看(除非您已经熟悉)T4 Toolbox https://github.com/olegsych/T4Toolbox 将“T4ScriptFileGenerator”自定义工具添加到文件中。当文件更改时,它会有效地运行 T4 代码。
【讨论】: