2

私はT4Scaffoldingを使用して、いくつかの C# コード生成を行っています。次のプロジェクト構造を検討してください。

プロジェクトの構造
Templatesプロジェクト にカスタム scaffolder を作成しました。ダミープロジェクトで実行したいのですが、次の例外が発生します。

ここに画像の説明を入力

プロジェクトでカスタム スキャフォールディングを使用するにはどうすればよいですか?

問題は、TFS に 20 個のプロジェクトがあり、t4 テンプレートのコードを 1 か所で管理したいということです。

4

2 に答える 2

1

CodeTemplates / Scaffolders / BaseSuperModuleにあるファイルとディレクトリをダミープロジェクトにコピーしてから、Scaffoldコマンドを呼び出すだけだと思います。

編集:それは完全に理にかなっています。カスタムt4ScaffoldingコードをNuGetパッケージに移動する方法を学習中です。それがあなたに最適なルートだと思います。わかり次第、回答を更新します。

編集2:私はこの記事を見つけ、それを調べて実際の例を示しました。それを試してみて、私がさらに助けることができるかもしれないかどうか私に知らせてください。

http://geekswithblogs.net/michelotti/archive/2011/07/14/leverage-t4scaffolding-for-wcf-web-api.aspx

于 2012-02-23T01:38:18.843 に答える
1

トリックは、テンプレート プロジェクトから足場を作成し、生成するプロジェクトの名前を渡すことだと思います。

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 パッケージには、この例がいくつかあります。

于 2014-06-23T12:40:11.953 に答える