我在与模板所在的程序集分开的程序集中创建了一个与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属性可能是解决此问题的一种方法。我只是想看看是否有更好的方法。
答案 0 :(得分:0)
这很有效。
private ITextTemplatingEngineHost _host;
private ITextTemplatingEngineHost HostProperty {
get
{
if (_host == null)
{
_host = (ITextTemplatingEngineHost)this.GetType().GetProperty("Host").GetValue(this, null);
}
return _host;
}
}