可以在 t4 模板中使用全局变量吗?

2024-04-13

如何在 TT 文件中使用全局变量?

如果我在标头中声明一个变量,并且在函数中引用它,则会出现编译错误。

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<# 
     int ValueForThisFile = 35;

     SomeFunction();
#>

<#+
void SomeFunction() {
#>
    public void GeneratedCode() { 
        int value = <#=ValueForThisFile#>;
    }
<#+
}
#>

我知道我可以将它作为参数传递,但有数百个调用,如果我可以避免这种情况,语法上会更严格。如果这是一个文件,我可以对值进行硬编码,但有数十个文件具有不同的设置和生成代码的公共包含文件。


我认为这是不可能的。当 T4 解析您的模板时,它实际上是生成一个类。所有 内容都被注入到该类的单个方法中,而所有 标记都作为方法添加到该类中,允许您从单个方法 标记调用它们。因此“ValueForThisFile”变量的范围仅限于该单个方法。举个简单的例子,这个模板:

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<# 
     int ValueForThisFile = 35;

     SomeFunction();
#>

<#+
void SomeFunction() {
   return ValueForThisFile;
}
#>

会生成一个这样的类:

class T4Gen {

private void MainWork() {
    int ValueForThisFile = 35;
    this.SomeFunction();
}

private void SomeFunction{
    return ValueForThisFile;
}

}

变量“ValueForThisFile”的作用域仅限于 MainWork 函数。 T4 生成的实际类要复杂得多,但正如您所见,无法在这样的代码中拥有全局变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可以在 t4 模板中使用全局变量吗? 的相关文章

  • 从其他 T4 模板运行 T4 模板

    有谁知道是否可以在 VS2010 内从另一个 T4 模板运行 T4 模板文件 Thank 是的你可以 这就是我正在做的 string templateText File ReadAllText Host ResolvePath templa
  • T4模板和运行时参数

    我正在 VS 2010 中构建一个插件 但我陷入了 T4 一代 现在我已经实现了 就像 MSDN 建议的那样 一个自定义 T4 主机来生成我的 T4 结果 我以这种方式使用它 const string content c Simple tt
  • 泛型方法可以使用逆变/协变类型吗?

    我正在编写一个通用方法 以在 T4 模板的特殊任务中使用它 该方法应该允许我使用通用接口中的专用类型 我考虑了以下签名 interface IGreatInterface Object aMethodAlpha u U parameter
  • T4 文本模板 - 是否可以从主机获取编译符号?

    背景 我有一个用 C 编写的开源游戏库 它使用不安全代码 指针算术等对性能进行了高度调整 我最近将该库移植到了 Windows Phone 不幸的是 Windows Phone 根本不支持不安全代码 因此我不得不在源代码中添加如下预处理器指
  • 将 T4 生成的代码写入单独的输出文件

    我正在创建一个 tt将文本转换为模型类的文件 以供练习 A cs生成的文件包含所有内容models 但我想要每个model被保存在自己的 cs文件在不同的文件夹中 实现这一目标的最佳方法是什么 以下是如何从单个 T4 模板输出多个文件的简单
  • 实体框架 EDMX - 实体复数修复

    我们发现复数化服务对某些单词存在一些错误 例如它认为 Campus 是复数 并用 Campu 将其单数化 无论如何 我们已经弄清楚如何使用 ICustomPluralizationMapping 接口向服务添加自定义映射 问题是 我们如何告
  • 代码生成器或 T4 模板,它们真的很邪恶吗?

    我听人们说不应使用代码生成器和 T4 模板 其背后的逻辑是 如果您使用生成器生成代码 那么有一种更好更有效的方法通过泛型和模板来构建代码 虽然我稍微同意上面的这一说法 但我还没有真正找到有效的方法来构建可以实例化自身的模板 换句话说 我永远
  • 无法在 .NET Core 项目中使用 T4 模板

    我有一个 NET Core 类库项目 我想使用设计时 T4 模板 模板编译正确 但是当我尝试使用反射时 它会引发错误 Running transformation System IO FileNotFoundException Could
  • Visual Studio 2013 中的自定义脚手架模板

    以前 使用 Visual Studio 2012 我能够将CodeTemplates文件夹到我的项目目录然后修改现有的T4 templates或者添加全新的 T4 模板来满足我特定的代码生成要求 前面描述的方法似乎不再适用于 Visual
  • Visual Studio 2008 中缺少 T4 代码生成?

    所以我决定卷起袖子尝试一下 VS2008 内置的 T4 代码生成 我打算继续写这篇文章 http www olegsych com 2008 09 t4 tutorial creatating your first code generat
  • T4 没有 Visual Studio?

    我正在尝试将一些代码生成模板连接到我团队的自动构建过程 我们的 SCM 团队不希望在我们的构建机器上使用 Visual Studio 对此我很难争论 有没有办法在没有 Visual Studio 的情况下安装 T4 引擎 我为 MonoDe
  • T4 FieldName 采用驼峰命名法,不带下划线?

    我正在使用 T4 生成一些类定义 并发现我的字段名称前面有一个下划线 我已经设定 code CamelCaseFields true 只是为了安全起见 尽管我知道这是默认设置 但最终仍然是 myField 而不是 myField 如何生成不
  • T4 报告编译转换:类、结构中的标记“this”无效

    尝试运行 T4 模板不可变对象图 https github com AArnott ImmutableObjectGraph给出的错误为 Error 5 Compiling transformation Invalid token this
  • 让 Visual Studio 在每次构建时运行 T4 模板

    如何让 T4 模板在每次构建时生成输出 就像现在一样 只有当我对模板进行更改时 它才会重新生成它 我还发现了其他类似的问题 Visual Studio 中的 T4 转换和构建顺序 https stackoverflow com questi
  • 如何获取CodeAttribute中的属性值

    我写了一个方法来按属性获取属性值 public string GetAttributeValueByNameAttributeAndProperty CodeClass cc string nameAttribute string name
  • 构建期间生成 T4 代码,自定义程序集参考

    我有一个 T4 模板 可以处理项目中的多个 tt 文件 我还定义了一些自定义类来帮助完成代码转换过程 lt template language C hostspecific True debug True gt lt output exte
  • 在实体版本 6 的 WCF 中使用“include”语法时,复杂对象不会返回

    好吧 这让我很困惑 因为我刚刚看到我的客户端在返回带有 include 的对象时基本上断开连接并终止 然而 如果没有 WCF 服务 它也可以正常工作 问题是我真的希望通过导航设置那些连接的对象 基本上 代码是一个复杂的对象返回 public
  • T4 模板和 Visual Studio 项模板

    是否可以创建从 T4 模板生成的 Visual Studio 项模板 我的 google fu 似乎不够强大 无法给出答案 是的 你需要使用GAX http msdn microsoft com en us teamsystem aa718
  • 实体框架数据库首次 POCO t4 生成和验证

    注意 我使用的是 ASP Net 应用程序而不是 MVC 因此不支持验证属性 我使用数据库优先方法 然后使用 POCO t4 模板生成 POCO 类 我将生成的 POCO 类移动到它自己的库 Domain Model 中 现在我想使用 En
  • 查找属性是 POCO 模板 t4 生成器中的主键

    我正在使用 VS 2012 附带的 POCO t4 模板生成器 我做了一些更改以包含 Entity Name 但我无法找出主键 public string EntityClassOpening EntityType entity retur

随机推荐

  • 将值从一个 jsp 页面传递到另一个 jsp 页面

    我正在将值从数据库检索到 jsp 中的表 到列 我想将该值插入到数据库中的另一个表中 为此 我使用另一个 jsp 表将该值插入到数据库中 并在之前的 jsp 页面表单操作选项卡中调用该 jsp 页面 I use request getPar
  • 时间:2019-03-14 标签:c++

    我正在编写一个 C 应用程序 我有一个类变量 多个线程正在写入该变量 在 C 中 任何可以在编译器 意识到 正在更改的情况下进行修改的内容都需要标记为易失性 对吧 因此 如果我的代码是多线程的 并且一个线程可能写入 var 而另一个线程从中
  • Swift 的标准库和名称冲突

    我知道 Swift 不使用命名空间 但名称是在每个模块中定义的 首先 我不太明白这是如何避免名称冲突的 请随意详细说明 尽管如此 我的主要问题是 假设我想要一个不使用 NSTreeNode 的树结构 所以我创建了自己的类 名为 TreeNo
  • Op 类型未在二进制中注册“SentencepieceEncodeSparse”

    我部署了一个模型 该模型使用 tfhub 模型来使用 docker 进行张量流服务 这是我的模型中包含的 tfhub 模型 https tfhub dev google universal sentence encoder multilin
  • DropboxAPI 入门,未找到类

    我第一次尝试使用 Dropbox API 但在启动应用程序时遇到此错误 Caused by java lang NoClassDefFoundError com dropbox client2 session Session AccessT
  • 异步任务中的异常在 Visual Studio 中被拦截

    我想运行多个任务 其中一些任务可以完成异步 然后等待所有任务完成 由于任务可能会引发异常 因此我想捕获并记录它们 sample code for that static async Task doit int x try Console W
  • 具有条件选择动作的剑道网格列

    这是我得到的 columns Bound t gt t Id Title Template
  • 处理 execvp 的参数数组?

    当我打电话时execvp 例如execvp echo b 其中 b 是命令 a 的参数数组 稍后更改该数组是否会影响之前进行的 execvp 调用 当我尝试调用 execp echo b 时 它最终打印出 null 而不是 b 内部的内容
  • Fetch API:从http响应中获取标题、关键字和正文

    我想知道使用 fetch api 有没有办法在同源发出 XMLHttpRequest 时不发送 cookie https stackoverflow com questions 9028234 is there a way to not s
  • 两指或小指缩放至 osmdroid 中的地图视图

    我需要帮助我正在尝试通过让用户多触摸点 首先是 2 根手指触摸 来缩放地图视图 我知道有 setMultiTouchControls 函数 但这不是我想要做的 我尝试用图片来解释 这比写作更容易 黑色粗体箭头表示手指的移动方向 相反方向也可
  • 如何停止已部署的 docker 堆栈?

    我刚刚完成了初学者 Docker 教程 https github com docker labs blob master beginner chapters votingapp md并想知道如何清理 我使用以下命令部署了一个堆栈和一些不同的
  • Firebase - 在不知道其成员的注册 ID 的情况下删除设备组

    在使用 Firebase 和设备组时 我正在测试令牌 注册 ID 发生更改的情况 例如重新安装应用程序后 但我的逻辑失败了 因为重新安装应用程序后我无法再知道以前存储的令牌 问题是现在我有一个设备组有两个 ghost 我不再知道的注册 ID
  • google +1 按钮向我的网站添加滚动条

    我的网站上有一个 google 1 按钮已经一年多了 一切都运行良好 在过去的几天里 这个按钮开始在我的网站上创建一个水平滚动条 我知道 因为当我删除按钮时 滚动条就会消失 这是我的网站 www kitchen guide co il ht
  • sonarqube 6.6 升级:不可恢复的索引失败

    sonarqube 从 6 5 升级到 6 6 使用 Debian 软件包 后 sonar 无法启动 升级之前我没有更新插件 我只是让标准的 Debian 软件包升级 我正在使用外部数据库 Postgresql 我在 web log 中发现
  • mysql搜索时如何忽略大小写的区别

    mysql搜索时如何忽略大小写的区别 做这样的事情 SELECT user FROM users WHERE UPPER user UPPER moustafa 基本上 您将结果转换为一种大小写 并与也转换为大写的搜索词进行比较 从而有效地
  • 在 C++ 中构造对象的不同方法

    我想使用 C 在堆栈中构造一个对象 你知道这两种调用构造函数的方式 带括号和不带括号 有什么区别吗 a MyClass object b MyClass object 我正在使用 MFC 在为主应用程序构造全局变量时 如果我使用后一种方式
  • React Router 4 中 URL 更改但视图未更改

    我使用的是react router 4而不是react router 3 所以我使用的是react router dom 我试图让 this props history push 工作 但它所做的只是保持视图相同 但 URL 发生了变化 例
  • 如何获取打开的文件弹出窗口

    现在 我有一个设置的类路径 但我想要弹出一个打开的文件 并且用户选择要打开的文件 我尝试过 JFileChooser 但到目前为止还没有成功 这是我的代码 public static void main String args throws
  • 在 PHP 中删除数组项的最佳方法是什么?

    您能告诉我从数组中删除项目的方法吗 你觉得这样好吗 那要看 a1 array a gt 1 b gt 2 c gt 3 unset a1 b array a gt 1 c gt 3 a2 array 1 2 3 unset a2 1 arr
  • 可以在 t4 模板中使用全局变量吗?

    如何在 TT 文件中使用全局变量 如果我在标头中声明一个变量 并且在函数中引用它 则会出现编译错误 lt template debug false hostspecific false language C gt lt output ext