私はPOCOタイプの生成の多くを単純化するためにアセンブリを書いています。複数のttファイルが含まれ、コードの生成に使用する1つのコアアセンブリがあります。
私がこれを行った理由は、どの拡張機能(Devart T4、Tangible-T4、またはVisual T4)を試しても、Visual StudioのC#エディターによって提供されるインテリセンスとサポートほど優れているものはないため、純粋なC#でコード生成を記述すると改善されますたくさんの経験。
私が直面している最大の問題は、エンティティフレームワークヘルパークラス(たとえばAccessibility
、CodeGenerationTools
などMetadataTools
)がアセンブリではなくttincludeファイル内で定義されているという事実です。現在、これらのクラスが提供する多くの機能を、アセンブリから使用できるように書き直す必要があります。
私の質問は、なぜエンティティフレームワークチームがいくつかのコンパイルされたアセンブリではなくttincludeファイルを使用することを決定したのですか?アセンブリアプローチを使用すると、より多くの状況ではるかに使いやすくなり、T4コード生成に影響を与えなかったようです(使用<#@ include #>
する代わりに<#@ assembly #>
)。
これを解決するための最善のアプローチは何か疑問に思っています。生成されたC#を実行EF.Utility.CS.ttinclude
してTextTransform.exe
から取得し、これをコンパイルすることを検討しました。これはお勧めできますか?
ありがとう、ルーク
アップデート
現在、私が行ったことEF.Utility.CS.ttinclude
はプロジェクトに追加することでした。ファイルのカスタムツールをに設定しますTextTemplatingFilePreprocessor
。これにより、クラスを含むコードが生成されます。次に、このcsファイルをコピーし、出力の書き込みを担当するクラス(メソッドがあります)を削除しTransformText()
て、アセンブリにコンパイルしました。これで、アセンブリでエンティティフレームワークユーティリティクラスを使用できます。