テンプレートが存在するアセンブリとは別のアセンブリで、T4 テンプレートで使用する基本クラスを作成しました。基本クラスでは、Host プロパティにアクセスする必要があります。このプロパティは、生成されたクラスに追加されます。そのため、基本クラスでコンパイル エラーが発生しないように、抽象プロパティを追加しました。
public virtual global::Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost Host { get; set; }
ビルドの警告が表示されます:
「Microsoft.VisualStudio.TextTemplatingD0A29F1F828173770AF28F0494709F7D.GeneratedTextTransformation.Host」は、継承されたメンバー「MyProject.TextTransformationBase.Host」を非表示にします。現在のメンバーでその実装をオーバーライドするには、override キーワードを追加します。それ以外の場合は、新しいキーワードを追加してください。
実行時エラーが発生します:
エラー 2 実行中の変換: System.Exception: ホスト プロパティが予期しない値 (null) を返しました
VS2012 では、テンプレート ディレクティブに hostSpecific="trueFromBase" 属性が追加されたようです。これにより、この特定のユース ケースが解決されると想定しています。VS2010に回避策があるかどうか疑問に思っていました。
おそらく、基本クラスで別のプライベート プロパティ名を使用し、実行時にリフレクションを使用して Host プロパティにアクセスすることで、これを回避することができます。もっと良い方法がないか見たかっただけです。