我正在使用T4Scaffolding来做一些 C# 代码生成。考虑以下项目结构:
我在模板项目中创建了一个自定义脚手架。现在我想为Dummy项目运行它,但我得到了这个异常:
如何在项目上使用自定义脚手架?
问题是:我在 TFS 中有 20 个项目,我想在 1 个中心位置管理 t4 模板的代码。
我正在使用T4Scaffolding来做一些 C# 代码生成。考虑以下项目结构:
我在模板项目中创建了一个自定义脚手架。现在我想为Dummy项目运行它,但我得到了这个异常:
如何在项目上使用自定义脚手架?
问题是:我在 TFS 中有 20 个项目,我想在 1 个中心位置管理 t4 模板的代码。
我认为只需将位于 CodeTemplates/Scaffolders/BaseSuperModule 中的文件和目录复制到 Dummy Project 中,然后调用 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 包中有一些这样的例子。