簡體   English   中英

如何使用VS2010在T4模板基類中創建抽象Host屬性?

[英]How can I create an abstract Host property in a T4 template base class with VS2010?

我創建了一個與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屬性可能是解決此問題的一種方法。 我只是想看看是否有更好的方法。

這可行。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM