我在Windows 7上使用VisualStudio Ultimate 2012(Update 1).我可以通过以下方式获取我的T4模板生成文件:
右键单击[tt file] | 运行自定义工具.这很棒!(对我而言).如果我运行菜单命令,它也可以工作:Build | 转换所有T4模板.但我想要自动化!当我尝试使用每个构建生成生成的代码文件时遇到问题 - 这是我的目标.
我看了一下:
Visual Studio中的T4转换和构建顺序
这不是我想要的.它讨论了使用预构建构建事件.我希望它成为构建的一部分.
并且: 有没有办法让Visual Studio在成功构建时运行"转换所有模板"?
这不是我想要的.它讨论了使用后期构建事件.
然后我发现了这个: 了解T4:MSBuild集成
来自Oleg Sych的博客:
完善!这就是我要的.虽然他的博客讨论了VS2010,但我已将其应用于VS2012(如适用).
为了实现这一点,我完成了他的每个步骤.我安装了Visual Studio SDK 2012 和Visual Studio Visualization and Modeling SDK(2012)
我开始使用Tangible T4插件,但认为有问题,我使用了Oleg的T4 Toolbox Beta.可悲的是,我似乎得到了相同的结果:构建错误.
我按照他在网站上的指示重新阅读了所有步骤和部分.我已经研究了几天,现在是我的第一篇文章.我被卡住了.谢谢你的期待......
回顾一下:当我在visual studio 2012中构建或者从命令行运行msbuild时出现错误(但是当我运行自定义工具或使用手动转换所有T4模板时 - 我们两个都工作正常).
这是我的t4模板s_code.tt
:
<#@ template debug="true" hostSpecific="true" language="C#" #>
<#@ output extension=".js" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Xml" #>
<#@ assembly name="EnvDTE" …
Run Code Online (Sandbox Code Playgroud) 我经常不使用T4模板; 通常在我这样做时正在编辑其他项目(特别是SubSonic和T4MVC).经验总是令人不快(这也是我不经常使用它们的原因).
这些是我所知道的工具,它们都不符合要求.
我第一次尝试使用它时,我认为Visual Studio 2010已经崩溃了.结果我没等多久(编辑器窗口出现花了2分多钟).叫我挑剔,但这一点让我脱离了这个工具.
我有一个修改过的T4MVC模板.安装Tangible的T4编辑器后,模板失败并出现多个错误.如果我然后卸载Tangible的T4编辑器,模板将再次运行.因此,编辑器会改变Visual Studio中T4的行为.也许显然,这是完全不可接受的.
我错过了还有其他T4编辑吗?是否有其他人使用这些工具,遇到这些相同的问题,并成功使用它们?
我还应该说,对我来说最重要的功能就是区分作为模板一部分运行的代码和获得输出的代码/文本.其他一切都是肉汁.
我正在尝试从VS2012项目生成代码进行一些实验,但我无法使这段t4代码工作
var project = VisualStudioHelper.CurrentProject;
Run Code Online (Sandbox Code Playgroud)
因为无法找到VisualStudioHelper.
我应该在我的t4中安装/包含什么才能使VisualStudioHelper可用?
我试着按照这个教程:http://t4-editor.tangible-engineering.com/blog/how-to-generate-multiple-output-files-from-a-single-t4-template.html
与visual studio 2015(.Net 4.5)
错误示例项目:http://www.filedropper.com/t4fail
我使用以下源创建了Template1.tt:
<#@ include file="TemplateFileManagerV2.1.ttinclude" #>
<#@ Assembly Name="System.Core" #>
<#@ Assembly Name="System.Windows.Forms" #>
<#@ import namespace="System" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Diagnostics" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Collections" #>
<#@ import namespace="System.Collections.Generic" #>
<#
var manager = TemplateFileManager.Create(this);
#>
Run Code Online (Sandbox Code Playgroud)
我TemplateFileManagerV2.1.ttinclude
从模板库添加到我的项目中.
然后我收到一个错误:
'Microsoft.VisualStudio.TextTemplating.IDebugTextTemplatingEngine'在未引用的程序集中定义.您必须添加对程序集"Microsoft.VisualStudio.TextTemplating.Interfaces.11.0,Version = 11.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"的引用.
所以我添加了引用
C:\ WINDOWS\Microsoft.NET \装配\ GAC_MSIL\Microsoft.VisualStudio.TextTemplating.11.0\v4.0_11.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.TextTemplating.11.0.dll
和
C:\ WINDOWS\Microsoft.NET \装配\ GAC_MSIL\Microsoft.VisualStudio.TextTemplating.Interfaces.11.0\v4.0_11.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.TextTemplating.Interfaces.11.0.dll
我的项目,但没有改变.
错误在以下方法里面 .ttinclude
public …
Run Code Online (Sandbox Code Playgroud) 我一直在编写一个程序集来简化我的POCO类型生成.我有一个核心程序集,其中包含多个tt文件并用于生成代码.
我这样做的原因是因为无论我尝试哪种扩展(Devart T4,Tangible-T4或Visual T4)都没有Visual Studio的C#编辑器提供的智能感知和支持,所以在纯C#编写代码生成改进了经验很多.
我现在面临的最大问题是,实体框架辅助类(如事实Accessibility
,CodeGenerationTools
,MetadataTools
等)是一个ttinclude文件,而不是一个组件内定义; 目前我不得不重写这些类提供的许多功能,以便可以从程序集中使用它.
我的问题是,为什么实体框架团队决定使用ttinclude文件而不是某些已编译的程序集?使用程序集方法似乎在更多情况下会更加可用,并且仍然不会影响T4代码生成(而不是使用<#@ include #>
它<#@ assembly #>
).
我想知道解决这个问题的最佳方法是什么,我已经考虑EF.Utility.CS.ttinclude
过TextTransform.exe
,然后采用生成的C#并编译它,这是可取的吗?
谢谢,卢克
更新
目前我所做的是添加EF.Utility.CS.ttinclude
到我的项目,将文件上的自定义工具设置为TextTemplatingFilePreprocessor
.这将生成包含类的代码.然后我复制了这个cs文件,删除了负责编写输出的类(它有方法TransformText()
)并编译成程序集.我现在可以在程序集中使用实体框架实用程序类.
我试图在VS2008的T4模板中使用PGK.Extensions for VB.NET,我得到:
RemoveAllSpecialCharacters不是字符串的成员..
我的T4标题:
<#@ template language="VB" hostspecific="false" debug="true" inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation" #>
<#@ output extension="vb" #>
<#@ assembly name="PGK.Extensions.dll" #> // the dll is found
<#@ import namespace="StringExtensions" #> //Try with and without namespace
Run Code Online (Sandbox Code Playgroud)
在块代码中使用扩展名:
<#
Me.WriteLine(item.Name.RemoveAllSpecialCharacters.ToUpper)
#>
Run Code Online (Sandbox Code Playgroud)
RemoveAllSpecialCharacters是PGK.Extensions.dll的字符串扩展方法.
有谁能够帮我?
编辑:
好.它的:
<#@ template language="VBv3.5" ...
Run Code Online (Sandbox Code Playgroud)
但这打破了VS2008插件中的DevArt T4 Editor intellisense和语法高亮.请改用有形T4编辑器.
错误说
我在C:\ Users \\ AppData\Local\assembly\dl3\4WT9GZ6E.WD1\0CNLWRJ6.ODR\3f01d2db\26ba7213_ebf0cb01中缺少ActiproSoftware.CSharpHostLanguage.xml,并在打开.tt或.ttinclude文件时崩溃.
我有visual studio 2010 sp1和windows 7 sp1 x86(32bit).
有形T4编辑器是v1.950.
欢迎任何建议.谢谢.
更新:最新版本1.962修复此问题.
t4 visual-studio-2010 windows-7 visual-studio-2010-sp1 tangible-t4-editor