Mar*_*son 14 c# t4 visual-studio-2010
我已经覆盖了控制器一代T4模板(ControllerWithContext.tt)所描述的在这里.
我想利用EF.utility.CS.ttincludePOCO模型生成器T4模板中使用的代码帮助程序实用程序.因此我将以下几行复制Model.tt到我的ControllerWithContext.tt.
<#@ include file="EF.Utility.CS.ttinclude"#>
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试添加控制器时,我收到错误消息
加载包含文件'EF.utility.CS.ttinclude'返回null或空字符串
根据MSDN文档,此错误是因为包含的文件是空白的,显然不是因为它可以使用Model.tt
我能看到的唯一区别是被覆盖的ControllerWithContext.tt没有定义自定义工具,而Model.tt它被设置为TextTemplatingFileGenerator.
我的解决方法是将我需要的功能复制ef.utility.cs.ttinclude到my中ControllerWithContext.tt,这本身就会产生更多错误,但很容易解决.
如何在未定义自定义工具的情况下包含T4模板?
Mar*_*son 10
按照@DustinDavis的建议,并使用OlegSych网站上的宝贵信息,这就是我所做的:
添加了项目引用
对于最后一个参考,我必须安装正确版本的Visual Studio SDK
<#@ import namespace="<name>" #>为using <name>;<#+ #>using Microsoft.VisualStudio.TextTemplating;扩展课程:
public class CodeGenerationTools : TextTransformation
Run Code Online (Sandbox Code Playgroud)覆盖该TransformText方法
public override string TransformText() {
throw new NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)添加了空构造函数
public CodeGenerationTools() {
_textTransformation = DynamicTextTransformation.Create(this);
_code = new CSharpCodeProvider();
_ef = new MetadataTools(_textTransformation);
FullyQualifySystemTypes = false;
CamelCaseFields = true;
}
Run Code Online (Sandbox Code Playgroud)接下来的步骤发生在主项目中 - 编辑了T4模板文件. - 将模板指令更改为
<#@ template language="C#" HostSpecific="True" debug="false" inherits="CodeGenerationTools"#>
Run Code Online (Sandbox Code Playgroud)
- 添加了指令
<#@ assembly name="C:\Visual Studio 2010\Projects\CodeGenerationTools\CodeGenerationTools\bin\Debug\CodeGenerationTools.dll" #>
<#@ import namespace="CodeGenerationTools" #>
Run Code Online (Sandbox Code Playgroud)
所有这些现在意味着我可以在我自己的T4模板中使用EF.Utility.CS.ttinclude中的辅助方法,并且我有办法添加我自己的帮助方法,这些方法将可用于所有项目.
答案是模板处理器甚至没有尝试获取包含文件(使用 ProcMon 确认)。您可以使用任何模板重现此内容,而不仅仅是 EF.Utility.CS.ttinlcude
不确定为什么需要代码,但您始终可以构建自己的基类,只需让它继承自 Microsoft.VisualStudio.TextTemplated.TextTransformation,然后放入 EF.Utility 文件中的所有代码即可。然后将继承指令设置为指向新的基类,然后您可以从模板访问这些方法。
| 归档时间: |
|
| 查看次数: |
13280 次 |
| 最近记录: |