我想在我的 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; }
}
我的 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();
但是我有这个错误信息:
Compiling transformation: The type or namespace name 'ClassDefinition' could not be found (are you missing a using directive or an assembly reference?)
我在互联网上查看并尝试: - 使用包括 - 使用组装 - 使用使用 但没有任何效果。
有什么想法吗?
最佳答案
这里是完整的解决方案:
将类分离到另一个元素中
通过 TT via 包含对这些类的引用
<#@ assembly name="$(TargetDir)MyOwnLibraryProject.dll" #> <#@ import namespace="MyOwnNamespace" #>
不要忘记将此库的引用包含到您的 TT 元素中
您必须将 MyOwnLibraryProject.dll 复制到 TT 解决方案的 BIN\DEBUG 文件夹中
魔法出现了!!!
每次更改 DLL 时,不要忘记将新版本放入文件夹中 :) 或者只是将您的库元素输出配置为与您的 TT 相同。 感谢大家提供指导方针和想法。
关于c# - T4 - TT - 在 TT 文件中使用自定义类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24957737/