我如何创建一个抽象的主机属性在T4模板基类与VS2010

本文关键字:T4 属性 VS2010 基类 主机 一个 何创建 创建 抽象的 | 更新日期: 2023-09-27 18:18:29

我创建了一个与T4模板一起使用的基类,在一个与模板所在的程序集分开的程序集中。在基类中,我需要访问Host属性。此属性被添加到生成的类中。所以我添加了一个抽象属性,这样我就不会在基类中得到编译错误。

public virtual global::Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost Host { get; set; }

我得到一个构建警告:

Microsoft.VisualStudio.TextTemplatingD0A29F1F828173770AF28F0494709F7D.GeneratedTextTransformation。隐藏继承的成员'MyProject.TextTransformationBase.Host'。要使当前成员覆盖该实现,请添加override关键字。否则添加新的关键字。

我得到一个运行时错误:

错误2 Running transformation: System。异常:主机属性返回非预期值(null)

似乎在VS2012中,他们添加了hostSpecific="trueFromBase"属性到模板指令,我假设这解决了这个特定的用例。我想知道是否有一个解决方案在VS2010。

也许通过在基类中使用不同的私有属性名称并在运行时使用反射访问Host属性可能是解决这个问题的一种方法。我只是想看看有没有更好的办法

我如何创建一个抽象的主机属性在T4模板基类与VS2010

可以了

private ITextTemplatingEngineHost _host;
private ITextTemplatingEngineHost HostProperty {
    get
    {
        if (_host == null)
        {
            _host = (ITextTemplatingEngineHost)this.GetType().GetProperty("Host").GetValue(this, null);
        }
        return _host;
    }            
}