Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有一些T4模板的情况_C#_Asp.net_Templates_T4_Tangible T4 Editor - Fatal编程技术网

C# 有一些T4模板的情况

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指令或程序集引用?)。它说要清除自定义工具,但我想知道如果清除该

我正在尝试为自定义控制器(带有服务)创建T4模板。但是,我在设置方面遇到了一些问题。我目前使用有形免费T4工具编辑器和TextTemplatingFileGenerator作为自定义工具。在进行实验时,我遇到了几个问题:

1:我尝试使用MvcTextTemplateHost mvcHost=(MvcTextTemplateHost)(Host);它说“找不到类型或命名空间名称MvcTextTemplateHost(是否缺少using指令或程序集引用?)。它说要清除自定义工具,但我想知道如果清除该工具,如何查看生成的T4文件

2:另一种方法是Steve Sanderson的CustomTemplate,但我发现DynamicTransform没有找到,我想知道在哪里可以获得使用它所需的文件。如果我需要为此清除工具,那么如何查看生成的示例文件?非常感谢

马克斯·吉尔曼

一些示例代码:

<#@ 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模板使用之前对其进行初始化

我认为你的选择是:

  • 创建自定义ASP.NET MVC T4模板,并使用ASP.NET工具使用“添加控制器”对话框生成自定义控制器
  • 创建自定义脚手架T4模板,并使用NuGet Package Manager控制台生成自定义控制器
  • 创建您自己的自定义工具,用于初始化可从T4模板使用的自定义主机

  • 选项2)可能是您最好的选择,因为我相信MvcScaffolding可以在不删除现有代码的情况下更新现有控制器代码。

    您可以发布一些简单的模板代码来重新说明您的问题吗?查看生成的代码的一种方法是指定自定义工具:textTemplatingFilePreprocessor如果您可以找出DynamicTrans的位置form类是定义的,您可以在T4中引用该程序集,如下所示: