问题标签 [t4]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4611 浏览

asp.net-mvc - MVC T4 MvcTextTemplateHost 和自定义的“控制器”T4 模板

我正在创建我自己的自定义 T4 模板,该模板与我的 MVC Web 应用程序中包含的 ADO.NET 实体框架模型(.edmx 文件)集成。

以供参考

请简单看一下以下两个网址。

  1. Scott Hanselman - “ T4 代码生成 Visual Studio 最佳保密
  2. Visual Web Developer Team Blog - ASP.NET MVC 开发人员快速入门指南

我要实现的目标的简短描述

使用 T4 引擎基于 ADO.NET 实体框架模型的主键生成具有 Action 方法的 MVC 控制器类。

我现在拥有的

  1. MVC T4 模板文件(例如,Controller.tt、Create.tt 等)已包含在我的 MVC Web 项目中。
  2. 我在“模型”文件夹中有一个 ADO.NET 实体框架MyModel.edmx 文件。

基于控制器名称(例如“ProductController”),我想从 ADO.NET Entity Framework 模型中检索“Product”类的[System.Type]信息。我希望能够以与 MVC View T4 文件(例如 Edit.tt)相同的方式检索System.Type信息,如下所示。

最终目标

我想创建控制器方法代码生成以通过反射从 ADO.NET 实体框架类中读取主键信息等,并为 EDIT、DETAILS、ADD 操作

生成基本的 CRUD 操作和方法签名......

我被困在哪里

但是,正如您从ASP.NET MVC 开发人员快速入门指南文章中看到的那样,我无法检索控制器T4 模板的[System.Type],因为MvcTextTemplateHost类仅公开了用于创建 MVC 视图的ViewDataType属性。

我通过以下技术检索 [System.Type] 的尝试不起作用,因为modelType被返回为null意味着它找不到类型。

我假设发生这种情况是因为实体框架模型包含在我的 MVC Web 项目中,而不是包含在已编译的 .DLL 库程序集中。

一些可以帮助我找到解决方案的事情

  1. 在哪里可以找到MvcTextTemplateHost类的源代码?如果我至少可以找到 DLL 文件,我大概可以查看代码如何加载在 Visual Studio “添加视图”对话框窗口中输入的类型信息。
  2. 有没有办法通过 Visual Studio IDE API 从我的 T4 模板动态检索 Visual Studio 项目中包含的类的 System.Type 信息?

如果有人能在这个主题上帮助我,我将不胜感激,因为这将允许我为 ADD、EDIT、DETAILS 等的 MVC 控制器操作方法生成 75% 的代码以及基本的 CRUD 操作代码。

0 投票
1 回答
281 浏览

vb.net - VBv3.5 在调用 ProcessTemplate 方法时包含指令 throw 的错误

我试图通过 T4 生成一些代码,当我在模板中包含 <#@ template language="VBv3.5"#> 指令时收到以下错误。

vbc:命令行(0,0):错误BC2006:编译转换:选项'r'需要':(file_list)

如果我使用 <#@ template language="C#v3.5"#> 作为我的指令,它工作得很好。此外,如果我不尝试通过代码生成并仅保存 .tt 文件,它与 VBv3.5 指令一起工作得很好。

这是我的 t4 模板。

这是我的 .NET 代码

0 投票
1 回答
1851 浏览

mysql - MySQL T4 模板错误:找不到元数据文件“MySql.Data”

D:\Web\CityV2\App_Code\ActiveRecord.tt(0,0):错误 CS0006:编译转换:找不到元数据文件“MySql.Data”

首先让我说我正在使用 VWD 2008 Express。

这些是我到目前为止采取的步骤:

  • 创建了一个全新的项目
  • 添加了对 Subsonic.Core.dll 和 MySql.Data.dll 的引用
  • 将 Active Record 模板复制到项目
  • 将所有 <#@ include file="SQLServer.ttinclude" #> 更改为 <#@ include file="MySQL.ttinclude" #>
  • 从 TemplateProviders 文件夹复制 MySQL.ttinclude 和 Settings.ttinclude
  • 使用我的连接字符串和数据库信息更新了 Settings.ttinclude
  • 更新了 Settings.ttinclude 并按照ranomore 的说明创建了外部工具映射
  • 尝试从模板构建代码并收到错误

然后我意识到我的开发盒上没有“安装”MySql 连接器(即使我添加了对 bin 的引用)。所以我继续访问 MySQL.com 并下载了最新的 6.0.4 连接器 msi 并安装了它 (GAC)。该错误不再出现,但其他任何事情都没有:没有新类,没有新错误,什么都没有[是的,我在运行命令后刷新了项目;-)]。

两件事情:

  1. 我在某处错过了一步吗?
  2. 有没有一种不需要将 MySQL 安装到 GAC 的方法来构建模板?
0 投票
1 回答
5120 浏览

c# - T4 代码生成:当前项目中的访问类型

使用 T4 代码生成,是否可以访问当前项目中定义的类型?

例如,如果我有一个接口并且我想将它的实现委托给另一个类,即

我想SomeClass通过代码生成自动化呼叫转移;这可能吗?

0 投票
1 回答
279 浏览

intellij-idea - 与 IntelliJ IDEA 中的 Visual Studio T4 类似的东西?

我正在寻找可以读取外部数据(例如 XML)然后生成源代码文件的东西。主要原因是有一个定义文件,然后让 Visual Studio 生成 C# 代码和 IntelliJ 生成 java 代码。


Visual Studio T4 是用于生成源代码的模板引擎。

0 投票
5 回答
817 浏览

.net - 您可以从 .NET 应用程序内部处理 T4 模板吗?

您可以从 .NET 应用程序内部处理 T4 模板吗?该代码是否可以调用?包含在项目中?许可?

更新:所以看起来你必须以某种方式使用 VS。

0 投票
4 回答
1194 浏览

.net - SubSonic 3 和多个 PK 列

我在使用 SubSonic 3 和多个主键列时遇到问题。ActiveRecord T4 脚本似乎不支持它。

在 Settings.ttinclude 的第 173 行

它尝试获取单个主键列并失败。

有什么解决办法吗?

0 投票
2 回答
771 浏览

visual-studio - Visual Studio 2008 中缺少 T4 代码生成?

因此,我决定卷起袖子尝试 VS2008 中内置的 T4 代码生成。

我打算完成这篇文章: http ://www.olegsych.com/2008/09/t4-tutorial-creatating-your-first-code-generator/

所以,我到了这一部分:“在主菜单中单击项目->添加新项目,然后在对话框中选择代码生成->文件模板。” 并发现我的机器上缺少代码生成类别。(在 VB 和 C# 项目中都试过)。

是否有单独的下载来在您的机器上安装 T4?

更新#1

所以,我从 CodePlex 下载了 T4 工具箱: http ://t4toolbox.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=27563

现在事情似乎已经解决了。我的印象是 VS2005 需要下载,但 VS2008 不需要。哦,好吧,无论如何,它看起来像是一个新版本,所以可能值得下载。

更新#2

现在看来我没有文章中显示的所有模板类型。我只有File,Template,Generator,Unit Test“Generator”文中没有列出,文中还有3个我没有。奇怪的....

0 投票
2 回答
13197 浏览

subsonic - SubSonic 3.0.0.2 结构.tt

我得到的错误似乎来自 Structs.tt 文件。我正在使用 Northwind 数据库并且仅使用 Products 表(我排除了所有其他表)。我返回 Json(Product.All())。

这是错误:

序列化“SubSonic.Schema.DatabaseColumn”类型的对象时检测到循环引用。这是堆栈跟踪:

用户代码未处理 System.InvalidOperationException 消息="在序列化“SubSonic.Schema.DatabaseColumn”类型的对象时检测到循环引用。" Source="System.Web.Extensions" StackTrace:位于 System.Web.Script.Serialization.JavaScriptSerializer 的 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat)。 System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) 在 System.Web 的 SerializeValue(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat)。脚本。

0 投票
2 回答
256 浏览

visual-studio-2008 - 安装 Subsonic - 添加文本模板无济于事

我正在尝试开始使用 Subsonic (v3)。简短的安装说明表明我必须:

  • 添加对 DLL 的引用 = 完成
  • 编辑 Setting.ttinclude 以使用正确的连接字符串 = 完成;将 appsettings 添加到 web.config
  • 将模板添加到项目 = 完成,但没有生成任何内容;没有错误也没有代码。

该演示表明,当您添加文件时,会创建适当的 .vb/.cs 类,或者会产生一些错误 - 但我什么也没得到,只是一个包含模板的文件夹。

当谈到 T4 模板时,我是一个完全的新手——事实上,直到现在我才知道它们存在(!)。

有什么想法吗?这必须是基本的东西;这应该很简单。

仅供参考:我正在使用 VS Professional 2008 - 我知道 VS Express 可能存在类似问题。