如何在VS2010的T4模板基类中创建抽象主机属性?

时间:2013-06-14 13:31:16

标签: c# visual-studio-2010 t4

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

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

我收到了构建警告:

  

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

我收到运行时错误:

  

错误2运行转换:System.Exception:Host属性返回意外值(null)

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

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

1 个答案:

答案 0 :(得分:0)

这很有效。

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