使用命名空间之外的 T4 模板位置

Posted

技术标签:

【中文标题】使用命名空间之外的 T4 模板位置【英文标题】:T4 Template place using outside of namespace 【发布时间】:2017-01-10 13:54:09 【问题描述】:

我尝试使用 t4 模板引擎,但它自动在命名空间块内包含 using 指令。它找不到System 命名空间,因为它在我们自己的MyProject.System 命名空间设置的父命名空间内搜索。

文件夹/命名空间结构

我的文件夹 其他文件夹 系统

模板文件

<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<div>Test</div>

CS 文件

namespace MyProject.MyFolder.Templates

    using System;
    using System.Linq;
    using System.Text;
    using System.Collections.Generic;

错误

MyProject.System 中找不到命名空间Linq

问题

如何强制 t4 将 using 放在命名空间块之外?

【问题讨论】:

您能否包含创建该输出的模板? 我添加了它。现在我刚刚重命名了我们的 System 命名空间,它解决了这个问题。 【参考方案1】:

您可以像这样以非相对方式引用System.Linq

using global::System.Linq;

如果这是一种有用的方法。

【讨论】:

c#代码是模板自己生成的。我刚刚重命名了我们的 System 命名空间。 你试过&lt;#@ import namespace="global::System" #&gt;吗?有兴趣知道它是否会起作用。

以上是关于使用命名空间之外的 T4 模板位置的主要内容,如果未能解决你的问题,请参考以下文章

如何将命名空间添加到我的 T4 脚手架?

在除 ADL、“本地”或全局命名空间之外的命名空间中定义函数

我们如何在创建它的文件之外访问未命名的命名空间?

在类方法内部访问类的命名空间之外?

使用与模板存在于同一项目中的 T4 模板中的类型

阻止 Visual Studio 将 using 指令放在命名空间之外