私はT4Scaffoldingを使用して、いくつかの C# コード生成を行っています。次のプロジェクト構造を検討してください。
Templatesプロジェクト
にカスタム scaffolder を作成しました。ダミープロジェクトで実行したいのですが、次の例外が発生します。
プロジェクトでカスタム スキャフォールディングを使用するにはどうすればよいですか?
問題は、TFS に 20 個のプロジェクトがあり、t4 テンプレートのコードを 1 か所で管理したいということです。
私はT4Scaffoldingを使用して、いくつかの C# コード生成を行っています。次のプロジェクト構造を検討してください。
Templatesプロジェクト
にカスタム scaffolder を作成しました。ダミープロジェクトで実行したいのですが、次の例外が発生します。
プロジェクトでカスタム スキャフォールディングを使用するにはどうすればよいですか?
問題は、TFS に 20 個のプロジェクトがあり、t4 テンプレートのコードを 1 か所で管理したいということです。
CodeTemplates / Scaffolders / BaseSuperModuleにあるファイルとディレクトリをダミープロジェクトにコピーしてから、Scaffoldコマンドを呼び出すだけだと思います。
編集:それは完全に理にかなっています。カスタムt4ScaffoldingコードをNuGetパッケージに移動する方法を学習中です。それがあなたに最適なルートだと思います。わかり次第、回答を更新します。
編集2:私はこの記事を見つけ、それを調べて実際の例を示しました。それを試してみて、私がさらに助けることができるかもしれないかどうか私に知らせてください。
http://geekswithblogs.net/michelotti/archive/2011/07/14/leverage-t4scaffolding-for-wcf-web-api.aspx
トリックは、テンプレート プロジェクトから足場を作成し、生成するプロジェクトの名前を渡すことだと思います。
T4Scaffolding.Scaffolder(Description = "Creates a model entity")][CmdletBinding()]
param(
[parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][string]$EntityName,
[string]$ProjectName,
[string]$CodeLanguage,
[string[]]$TemplateFolders,
[switch]$Force = $false
)
# Find the code project, or abort
$project = Get-Project ( $ProjectName) -ErrorAction SilentlyContinue
if (!$project) { throw "Cannot find code project corresponding to solution '$ProjectName'" }
$entityFile = $EntityName
Add-ProjectItemViaTemplate $entityFile -Template EntityTemplate `
-Model @{ Namespace = $namespace; EntityName = $EntityName; MappingName = $MappingName } `
-SuccessMessage "Added Model non-gen output at {0}" `
-TemplateFolders $TemplateFolders -Project $ProjectName -CodeLanguage $CodeLanguage -Force:$false
プロジェクト オブジェクトではなく、Add-ProjectItemViaTemplates の -Project 引数に文字列を渡す必要があります
さまざまなスキャフォルダーを適用する必要があるプロジェクトが既にわかっている場合は、スキャフォルダーで ProjectName の既定値を設定できます。
MvcScaffolding パッケージには、この例がいくつかあります。