Ond*_*cny 5 t4 inheritance visual-studio-2010
我有一个T4模板系统 - 在运行时执行,而不是在编译时执行 - 它在我的应用程序中生成许多类的骨架.所有这些模板都驻留在生成器工具中,该工具不时用于将新类预生成到目标应用程序中.该工具包含一个配置类,其属性参数化所有T4模板的输出.
最初配置类是静态类.但是,随着类生成器工具的增长,最好使其成为非静态的,而是为每次使用创建一个新实例.问题是如何将此实例传递给T4模板的实例.自然的方式似乎是从一个公共基础继承它们,这个公共基础将配置配置类实例.
问题是,TextTransformation我的自定义T4基类继承的类位于一个程序集中(根据这个SO问题的来源)不附带Visual Studio 2010.而是在Visual Studio中提供它2010 SDK.
VS2010生成的基类虽然本身没有祖先,但不是部分的,所以没有办法通过另一个部分声明"注入"自定义祖先.
因此问题是:有没有办法从自定义基类继承运行时执行的T4模板而无需安装Visual Studio 2010 SDK?
免责声明:我对T4不是很熟悉,所以对于如何解决这个问题我可能完全错了.因此,欢迎任何其他建筑建议,虽然我的目标不是创建一个超级架构的发电机 - 它只是一个辅助工具,对于偶尔的读者来说应该是简单易懂的.
解决方案实际上非常简单 - 基类可以作为T4模板本身实现并继承.像这样:
基本模板:
<#@ template language="C#" #>
<#+
public Config Config { get; set; }
#>
Run Code Online (Sandbox Code Playgroud)
继承的模板:
<#@ template language="C#" inherits="BaseTemplate" #>
...
<#= Config.SomeProperty #>
...
Run Code Online (Sandbox Code Playgroud)
实例化模板后,基本模板中声明的属性将提供给实际配置.
包含基类的程序集实际上随 Visual Studio 一起提供,但它安装在 GAC 中,没有参考程序集。Visual Studio SDK 仅包含 DLL 的可引用版本。
因此,如果您在代码中创建新的基类,则需要 VS SDK 来构建该基类,但不使用它。到时候,GAC 中的版本将会被选取。
| 归档时间: |
|
| 查看次数: |
3542 次 |
| 最近记录: |