我正在使用T4Scaffolding做一些C#代码生成。考虑以下项目结构:
我在模板项目中创建了一个custrom脚手架。现在我想为 Dummy 项目运行它,但是我得到了这个例外:
如何在项目中使用自定义脚手架?
问题是:我在TFS中有20个项目,我想在1个中心位置管理t4模板的代码。
答案 0 :(得分:1)
我认为只需将位于CodeTemplates / Scaffolders / BaseSuperModule中的文件和目录复制到Dummy Project中,然后调用Scaffold命令。
编辑:这非常有意义。我正在学习如何将自定义t4Scaffffding代码移动到NuGet包中。我认为那将是最适合你的路线。我一想好就会更新我的答案。
编辑2:我找到了这篇文章,然后我找到了一个有效的例子。试一试,让我知道我是否能够进一步提供帮助。
http://geekswithblogs.net/michelotti/archive/2011/07/14/leverage-t4scaffolding-for-wcf-web-api.aspx
答案 1 :(得分: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包中有一些例子。