C# 有一些T4模板的情况
我正在尝试为自定义控制器(带有服务)创建T4模板。但是,我在设置方面遇到了一些问题。我目前使用有形免费T4工具编辑器和TextTemplatingFileGenerator作为自定义工具。在进行实验时,我遇到了几个问题: 1:我尝试使用MvcTextTemplateHost mvcHost=(MvcTextTemplateHost)(Host);它说“找不到类型或命名空间名称MvcTextTemplateHost(是否缺少using指令或程序集引用?)。它说要清除自定义工具,但我想知道如果清除该工具,如何查看生成的T4文件 2:另一种方法是Steve Sanderson的CustomTemplate,但我发现DynamicTransform没有找到,我想知道在哪里可以获得使用它所需的文件。如果我需要为此清除工具,那么如何查看生成的示例文件?非常感谢 马克斯·吉尔曼 一些示例代码:C# 有一些T4模板的情况,c#,asp.net,templates,t4,tangible-t4-editor,C#,Asp.net,Templates,T4,Tangible T4 Editor,我正在尝试为自定义控制器(带有服务)创建T4模板。但是,我在设置方面遇到了一些问题。我目前使用有形免费T4工具编辑器和TextTemplatingFileGenerator作为自定义工具。在进行实验时,我遇到了几个问题: 1:我尝试使用MvcTextTemplateHost mvcHost=(MvcTextTemplateHost)(Host);它说“找不到类型或命名空间名称MvcTextTemplateHost(是否缺少using指令或程序集引用?)。它说要清除自定义工具,但我想知道如果清除该
<#@ Template Language="C#" HostSpecific="True" Inherits="DynamicTransform" #>
<#@ Output Extension="cs" #>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
namespace someNamespace
{
<#
var modelType = (CodeType)Model.ModelType;
var modelName = modelType.Name;
var modelNamePlural = Model.ModelTypePluralized;
var modelVariable = modelName.ToLower();
var relatedEntities = ((IEnumerable)Model.RelatedEntities).OfType<RelatedEntityInfo>();
var primaryKeyProperty = modelType.VisibleMembers().OfType<CodeProperty>().Single(x => x.Name == Model.PrimaryKey);
var routingName = Regex.Replace(Model.ControllerName, "Controller$", "", RegexOptions.IgnoreCase);
var isObjectContext = ((CodeType)Model.DbContextType).IsAssignableTo<System.Data.Objects.ObjectContext>();
#>
public class foo
{
//This is a basic comment.
}
}
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用System.Linq.Expressions;
使用系统文本;
名称空间名称空间
{
x、 Name==Model.PrimaryKey);
var routingName=Regex.Replace(Model.ControllerName,“Controller$”,“”,RegexOptions.IgnoreCase);
var isObjectContext=((CodeType)Model.DbContextType).IsAssignableTo();
#>
公开课foo
{
//这是一个基本的评论。
}
}
在这两种情况下,您似乎试图在Visual Studio项目中使用T4模板,并使用TextTemplatingFileGenerator作为自定义工具从模板生成代码
1:MVCTextTemplatingGhost是一个自定义T4主机,仅在使用ASP.NET MVC添加视图或添加控制器对话框时可用。使用TextTemplatingFileGenerator自定义工具时,它将不可用,也不会正确初始化
2:Steve Sanderson的MvcScaffolding/T4Scaffolding使用了自己的自定义T4主机,因此您在这里遇到了类似的问题。如果您将NuGet package manager控制台与自定义T4 scaffolding模板一起使用,那么它应该可以工作,但不能与TextTemplatingFileGenerator自定义工具一起工作。DynamicTransform类本身不存在。如果u查看InvokeScapfoldTemplateCmdlet类中的on-CodePlex,您将看到Inherits=“DynamicTransform”指令实际上已被删除,并替换为对动态模型对象的引用。当您构建控制器时,各种属性(例如model.ModelType)在传递到T4模板进行处理之前,在自定义主机和动态模型对象上设置
在上述两种情况下,将T4模板与TextTemplatingFileGenerator一起使用是行不通的,因为它们使用的是自定义模板主机,需要在T4模板使用之前对其进行初始化
我认为你的选择是:
选项2)可能是您最好的选择,因为我相信MvcScaffolding可以在不删除现有代码的情况下更新现有控制器代码。您可以发布一些简单的模板代码来重新说明您的问题吗?查看生成的代码的一种方法是指定自定义工具:textTemplatingFilePreprocessor如果您可以找出DynamicTrans的位置form类是定义的,您可以在T4中引用该程序集,如下所示: