我想从我的 dbml(Linq to Sql) 文件中生成一些代码,dbml 文件放在我项目的许多部分所以我为此编写了一个自定义工具
但问题是 dbml 已经包含了 MSLinqToSQLGenerator 自定义工具,
那么您知道为一个文件设置两个自定义工具的任何方法吗,如果不知道,请告诉我您对此的想法
我想从我的 dbml(Linq to Sql) 文件中生成一些代码,dbml 文件放在我项目的许多部分所以我为此编写了一个自定义工具
但问题是 dbml 已经包含了 MSLinqToSQLGenerator 自定义工具,
那么您知道为一个文件设置两个自定义工具的任何方法吗,如果不知道,请告诉我您对此的想法
Visual Studio will only support a single "Custom Tool" per file, but you can add a pre-compilation step to run other tools against anything you want. For instance, I have the following pre-compile step set on the "Build Events" tab of one of my projects.
"$(DevEnvDir)..\..\..\Common Files\Microsoft Shared\TextTemplating\10.0\TextTransform" "$(ProjectDir)DataContext\Northwind.proxy.tt"
There's a lot of relative pathing going on here in order to find the T4 command-line tool, but you get the idea. This particular T4 file counts on being in the same directory as the .dbml file that it reads to generate its output.
Before the project is compiled, you can run whatever external tool you want. Just make sure that after the first run, you include the tool's output in the project. After that, since the file gets changed as part of a PRE-compile step, it will always be updated in each build.
如果您将 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 代码。