使用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);
#>
我在模板库中添加了TemplateFileManagerV2.1.ttinclude
到我的项目中。
然后我收到了一个错误:
&#39; Microsoft.VisualStudio.TextTemplating.IDebugTextTemplatingEngine&#39;是 在未引用的程序集中定义。你必须添加一个 参考装配 &#39; Microsoft.VisualStudio.TextTemplating.Interfaces.11.0, Version = 11.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a&#39;。
所以我添加了对
的引用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 string GetTemplateContent(string templateName, TextTemplatingSession session)
{
string fullName = this.Host.ResolvePath(templateName);
string templateContent = File.ReadAllText(fullName);
var sessionHost = this.Host as ITextTemplatingSessionHost;
sessionHost.Session = session;
Engine engine = new Engine();
return engine.ProcessTemplate(templateContent, this.Host);
}
我用
替换了它public string GetTemplateContent(string templateName, TextTemplatingSession session)
{
string fullName = this.Host.ResolvePath(templateName);
string templateContent = File.ReadAllText(fullName);
var sessionHost = this.Host as ITextTemplatingSessionHost;
sessionHost.Session = session;
//Engine engine = new Engine();
return "";//engine.ProcessTemplate(templateContent, this.Host);
}
检查问题是否确实在dll中并且得到了:
&#39; Microsoft.VisualStudio.TextTemplatingA30AC8B57EFC4307E43667FCD72F5E4857F498C5224AE0D43FFC74B3A98D4FA090794EF196648D62B1BC664AFBA5EDE831067D7D1768A759EBBE83426975F7AA.GeneratedTextTransformation&#39; 不包含&#39; Host&#39;的定义没有扩展方法 &#39;主机&#39;接受第一个类型的参数 &#39; Microsoft.VisualStudio.TextTemplatingA30AC8B57EFC4307E43667FCD72F5E4857F498C5224AE0D43FFC74B3A98D4FA090794EF196648D62B1BC664AFBA5EDE831067D7D1768A759EBBE83426975F7AA.GeneratedTextTransformation&#39; 可以找到(你错过了使用指令或程序集 引用?)
看来,它不是。
答案 0 :(得分:13)
我记得我在2010年找到了一种更简单的方法,但现在,在浏览了该方法后,我再也找不到了。因此,经过一番挖掘,我设法在一个旧的源代码库中找到它。这是我当时的做法,没有使用任何外部文件或依赖:
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System" #>
<#@ import namespace="System.IO" #>
<#@ output extension=".txt" #>
<#
for (Int32 i = 0; i < 10; ++i) {
#>
Content <#= i #>
<#
// End of file.
SaveOutput("Content" + i.ToString() + ".txt");
}
#>
<#+
private void SaveOutput(string outputFileName) {
string templateDirectory = Path.GetDirectoryName(Host.TemplateFile);
string outputFilePath = Path.Combine(templateDirectory, outputFileName);
File.WriteAllText(outputFilePath, this.GenerationEnvironment.ToString());
this.GenerationEnvironment.Remove(0, this.GenerationEnvironment.Length);
}
#>
请注意,我不知道此方法的原作者是谁。如果您碰巧知道他或她是谁,请发表评论。
答案 1 :(得分:3)
<#@ template hostSpecific="true"#>
.tt
文件顶部的解决了所有问题。
答案 2 :(得分:0)
这是有形工程公司的文档:
它要求您包括并使用模板文件管理器。步骤简要如下:
<#@ include file="TemplateFileManagerV2.1.ttinclude" #>
<# var manager = TemplateFileManager.Create(this); #>
<# manager.StartNewFile("Outputfile2.txt"); #>
<# manager.Process(); #>
此外,此方法还将自动将新文件添加到项目中。