Как я могу использовать T4 Custom Scaffolding над проектами? - PullRequest
2 голосов
/ 22 февраля 2012

Я использую T4Scaffolding , чтобы сделать некоторые генерации кода C #.Рассмотрим следующую структуру проекта:

Project structureЯ создал леса custrom в проекте Templates .Теперь я хотел бы запустить его для проекта Dummy , но получаю следующее исключение:

enter image description here

Как я могу использовать Custom Scaffolding над проектами?

Дело в том, что у меня 20 проектов в TFS, и я хотел бы управлять кодом шаблонов t4 в одном центральном месте.

Ответы [ 2 ]

1 голос
/ 23 июня 2014

Я думаю, что хитрость заключается в том, чтобы создать леса из проекта шаблонов и передать имя проекта, который вы хотите сгенерировать, например, в.

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

Вы должны передать строку в аргумент -Project в Add-ProjectItemViaTemplates, а не в объекте проекта

Если вы уже знаете проекты, к которым должны применяться различные скаффолдеры, вы можете установить значение по умолчанию для ProjectName в скаффолдере.

Есть несколько примеров этого в пакете MvcScaffolding.

1 голос
/ 23 февраля 2012

Я думаю, что это просто вопрос копирования файлов и каталогов, расположенных в CodeTemplates / Scaffolders / BaseSuperModule, в Dummy Project и последующего вызова команды Scaffold.

Edit: Thatимеет смысл.Я нахожусь в процессе изучения того, как переместить пользовательский код t4Scaffolding в пакет NuGet.Я думаю, что это будет путь, который будет работать лучше для вас.Я обновлю свой ответ, как только выясню.

Редактировать 2: Я нашел эту статью, прошел ее и получил рабочий пример.Попробуйте и дайте мне знать, если я смогу помочь в дальнейшем.

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

...