我正在尝试将一些代码生成模板连接到我的团队的自动构建过程.我们的SCM团队不希望在我们的构建机器上使用Visual Studio(我很难与之争论).
有没有办法在没有Visual Studio的情况下安装T4引擎?
我正在使用T4(文本模板转换工具包)进行一些工作,并且我试图达到可以创建自己的自定义文本模板主机的程度.但是,所有这些都依赖于Microsoft.VisualStudio.TextTemplating程序集,我在我的系统上找不到它!
我首先尝试在Visual Studio中添加对程序集的引用,但Microsoft.VisualStudio.TextTemplating的程序集未列在.NET选项卡下.
然后,我查看了%WINDIR%/ Assembly目录,找到了Microsoft.VisualStudio.TextTemplating的条目.但是,当我尝试浏览到此位置并在Visual Studio中添加程序集时,没有任何反应.
还有其他人有这个问题吗?根据MSDN tuts,听起来这个程序集应该包含在Visual Studio中(我安装了VS 2003,2005和2008).
我在主程序集中的测试器类中有以下代码PocoGenerator
.该程序集应该使用T4模板基于引用程序集(项目引用)中的L2S实体生成POCO DataObjects
.
var assemblyName = "DataObjects";
var dataObjects = AppDomain.CurrentDomain.Load(new AssemblyName(assemblyName));
Run Code Online (Sandbox Code Playgroud)
尽我所能,我不能让T4找到DataObjects程序集.我尝试了各种形式的assembly
指令,例如:
<#@ assembly name="DataObjects" #>
<#@ assembly name="DataObjects, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" #>
Run Code Online (Sandbox Code Playgroud)
无济于事.上面的代码在测试器类中工作,但不在模板中.我究竟做错了什么?
补充:我已经通过在机器人位置使用绝对路径来解决这个问题,我引用它,指令以及类功能块,即
<#@ assembly name="C:\Development\PocoGenerator\DataObjects\bin\Debug\DataObjects.dll" #>
Run Code Online (Sandbox Code Playgroud)
和
var sourceAssembly = Assembly.LoadFile(@"C:\Development\PocoGenerator\DataObjects\bin\Debug\DataObjects.dll");
Run Code Online (Sandbox Code Playgroud)
但我真的不喜欢这个,因为我想在各个项目中使用这个模板,而我只是简单地讨厌重复,特别是魔术字符串.
我有一个T4模板,用于在Visual Studio中使用TextTemplatingFileGenerator自定义工具设置的类:
<#@ template language="C#v3.5" hostspecific="True" debug="True" #>
<#
var className = System.IO.Path.GetFileNameWithoutExtension(Host.TemplateFile);
var namespaceName = "MyNamespace";
#>
namespace <#= namespaceName #>
{
public static class <#= className #>
{
// some generated code
}
}
Run Code Online (Sandbox Code Playgroud)
如何在Visual Studio中获取"自定义工具命名空间"属性的值,因此我不必对命名空间进行硬编码?
我甚至会对C#项目的默认命名空间感到满意.
T4文本模板是文本块和控制逻辑的混合,可以生成文本文件.
任何人都可以建议我在.NET Core中使用T4替代品吗?微软是否有计划在.NET Core世界中引入T4?
我使用T4toolbox生成一堆文件,假设我的t4文件名是x.t4,但是默认它会生成一个x.txt,里面什么都没有,我可以告诉t4引擎不要这样做吗?
我该如何解决这些错误:
使用的工具:VS 2012,Entity Framework 5.0.0,T4MVCExtensions 3.5.0,.NET Framework 4.5
我一直在大型MVC解决方案中的项目中使用EF和T4模板而没有发生任何事故.现在,当我右键单击edmx图时,EF会响应以下消息:值不在预期范围内.当我编译EF项目时,它会回复这些消息:
数据库中的每个表都有一个主键.我很惊讶这个问题突然出现了.有没有人有一些建议如何解决这个问题?
提前致谢,
阿诺德
T4已经在Visual Studio中存在了好几年,但没有得到很多关注.但是,对于那些了解它的人来说,似乎有一些非常有创意和有用的目的.
我正在研究使用T4的一些不同方式,我很高兴听到您如何将它用于现实生活场景.我主要对非标准和创造性用途感兴趣.
一些有趣的例子:
注意:我意识到这是一个面向讨论的问题,但答案可能对其他人有所帮助.我已将其标记为主观且也标记为"社区维基",因此请允许该问题保持开放.谢谢!
我想询问是否有人或已经看过NHAMl的T4模板与MVC 2.0的默认T4 CRUD(列表,创建等)模板相同?
有人知道,在.tt文件中,code.VsNamespaceSuggestion()从哪里获取其命名空间?
我遇到了一个问题,我必须更改解决方案的命名空间,我发誓我已经改变了它(文件夹名称,文件名,项目名称,项目属性,程序集信息等).但是当.tt文件运行时,它总是将旧命名空间放回其生成的类中.我被告知它来自EF模型,但我没有看到任何显示命名空间(在设计器/属性中或通过在NotePad中打开.edmx文件).
有什么想法吗?对于hack,我只是在下一行中使用我想要的命名空间覆盖它:
string namespaceName = code.VsNamespaceSuggestion();
namespaceName = "Desired.Namespace"; //HACK:
Run Code Online (Sandbox Code Playgroud)