【问题标题】:How can I create an abstract Host property in a T4 template base class with VS2010?如何使用 VS2010 在 T4 模板基类中创建抽象 Host 属性?
【发布时间】:2013-06-14 21:45:44
【问题描述】:

我在与存在模板的程序集分开的程序集中创建了一个基类以与 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 属性可能是解决此问题的一种方法。我只是想看看有没有更好的方法。

【问题讨论】:

    标签: c# visual-studio-2010 t4


    【解决方案1】:

    这行得通。

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

    【讨论】:

    • 是的,这是我们在 TrueFromBase 可用之前所做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 2010-10-10
    • 1970-01-01
    • 2011-06-12
    相关资源
    最近更新 更多