Eag*_*gle 9 css c# t4 texttemplate
我想在我的TT中的CS文件中使用我自己的类定义.
例:
public class ClassDefinition
{
public string NameSpace { get; set; }
public string Name { get; set; }
public string Protection { get; set; }
List<ClassProperty> Properties { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的TT看起来像:
<#@ template debug="true" hostspecific="true" language="C#" #>
<#@ output extension=".cs" #>
<#@ assembly name="System" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Xml"#>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.IO" #>
<#@ include file="$(ProjectDir)ClassDefinition.cs" #>
<#
// Read the model file
XmlDocument doc = new System.Xml.XmlDocument();
doc.Load(this.Host.ResolvePath("GeneratedXmlFile.xml"));
IList<XmlNode> nodeList = new List<XmlNode>();
foreach (XmlNode node in doc.DocumentElement)
{
switch(node.Name)
{
case "Model":
{
ClassDefinition classDefinition = new ClassDefinition();
Run Code Online (Sandbox Code Playgroud)
但是我有这个错误消息:
编译转换:找不到类型或命名空间名称"ClassDefinition"(您是否缺少using指令或程序集引用?)
我在互联网上检查并试图: - 使用包括 - 使用汇编 - 使用USING但没有任何作用.
有任何想法吗 ?
Eag*_*gle 14
这是完整的解决方案:
1)将类分成另一个项目2)通过TT via包括对这些类的引用
<#@ assembly name="$(TargetDir)MyOwnLibraryProject.dll" #>
<#@ import namespace="MyOwnNamespace" #>
Run Code Online (Sandbox Code Playgroud)
3)不要忘记在TT项目中包含此库的参考
4)您必须将MyOwnLibraryProject.dll复制到TT解决方案的BIN\DEBUG文件夹中
5)神奇的出现!
每次更改DLL时都不要忘记将新版本放入文件夹中:)或者只是将Library项目输出配置为与TT版本相同.我想感谢大家提供指导和想法.
如果我对您的理解正确,那么您正在尝试重用一个类,作为模板生成的一部分。
该类本身必须位于tt文件中,构建操作设置为none,自定义工具-否。我所拥有的是模板管理器类,其顶部为以下内容:
<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Diagnostics" #>
<#+
public class TemplateManager
{
Run Code Online (Sandbox Code Playgroud)
然后在其他t4模板中使用:
<#@ include file="TemplateManager.tt"#>
Run Code Online (Sandbox Code Playgroud)
然后
List<Values> values = TemplateManager.PrepareVariables(code, container, itemCollection.OfType<EntityType>())
Run Code Online (Sandbox Code Playgroud)
在您的情况下,ClassDefinition.tt文件将包含:
<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Diagnostics" #>
<#+
public class ClassDefinition
{
public string NameSpace { get; set; }
public string Name { get; set; }
public string Protection { get; set; }
List<ClassProperty> Properties { get; set; }
}
#>
Run Code Online (Sandbox Code Playgroud)
然后,您可以包括
<#@ include file="ClassDefinition.tt"#>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14802 次 |
| 最近记录: |