0

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

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

我收到构建警告:

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

我收到运行时错误:

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

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

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

4

1 回答 1

0

这行得通。

private ITextTemplatingEngineHost _host;
private ITextTemplatingEngineHost HostProperty {
    get
    {
        if (_host == null)
        {
            _host = (ITextTemplatingEngineHost)this.GetType().GetProperty("Host").GetValue(this, null);
        }
        return _host;
    }            
}
于 2013-06-14T13:45:44.607 回答