c# - T4 - TT - 在 TT 文件中使用自定义类

标签 c# t4 css 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; }
}

我的 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?)

我在互联网上查看并尝试: - 使用包括 - 使用组装 - 使用使用 但没有任何效果。

有什么想法吗?

最佳答案

这里是完整的解决方案:

  1. 将类分离到另一个元素中

  2. 通过 TT via 包含对这些类的引用

    <#@ assembly name="$(TargetDir)MyOwnLibraryProject.dll" #>
    <#@ import namespace="MyOwnNamespace" #>
    
  3. 不要忘记将此库的引用包含到您的 TT 元素中

  4. 您必须将 MyOwnLibraryProject.dll 复制到 TT 解决方案的 BIN\DEBUG 文件夹中

  5. 魔法出现了!!!

每次更改 DLL 时,不要忘记将新版本放入文件夹中 :) 或者只是将您的库元素输出配置为与您的 TT 相同。 感谢大家提供指导方针和想法。

关于c# - T4 - TT - 在 TT 文件中使用自定义类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24957737/

相关文章:

c# - Autofac IComponentContext.Resolve<Type> 是服务定位器模式吗

html - 在文本下方显示行列表

javascript - 如何在 JS 中旋转图像后更改图像 css?

c# - 通过 DI 注册的 IActionContextAccessor 中的 ActionContext 为 null

c# - 由于错误,可以从 VS Code 构建和部署 azure 函数

c# - 从文件中读取 xml

c# - 访问 NavigationProperty 的关联详细信息

.net - T4 模板问题

T4 模板中的注释

html - 将副标题放在居中的标题旁边