c# - T4模板多次处理输入

标签 c# visual-studio t4

我最近在 visual studio 中制作了一个 T4 模板,开始遇到一个我找不到原因的问题。 每当我编辑模板并运行它时,它都会按预期执行。如果我在不编辑模板的情况下再次运行它,内容将重复输出。如果我再次运行它而不进行编辑,它会添加另一个重复项,导致看到输出 3 次。等等。

<#@ template debug="true" hostSpecific="true" #>
<#@ output extension=".txt" #>
<#@ Assembly Name="System.Core" #>
<#@ import namespace="System" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Diagnostics" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Collections" #>
<#@ import namespace="System.Collections.Generic" #> 
<#
    input.Add("data1");
    input.Add("data2");
    foreach(var data in input)
    {
#>
<#=data#>
<#
    }
#>
<#+
    static List<string> input = new List<string>();
#>

最佳答案

经过一些逻辑思考后,我得出结论,该模板以某种方式“记住”了我的输入。然后我认为这可能是我为收集输入而包含的 static 类功能。删除它解决了问题!之所以会首先出现静态是因为我首先在控制台应用程序中测试了大部分复杂的初始化逻辑,然后将其复制到模板中。

结论: 因此,当您保存 T4 模板并将其加载到 appdomain 中然后执行它时,visual studio 似乎会从您的 T4 模板构建一个库。它将重复使用这个加载的库,直到你编辑你的模板。这就是这个静态变量如何记住上次运行模板时的输入 - 它仍然存在。

作为旁注,下次我将在类实例中而不是在 static void main() 旁边测试我的初始化代码!

关于c# - T4模板多次处理输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14660286/

相关文章:

c# - 使用 SSL 的 .net Web 服务。 wcf?

c# - 检测 xll 是否已永久安装或 xll 文件是否只是临时打开?

c# - 文件上传导致asp.net mvc中模型状态无效

c++ - 多个 DLLMain 函数

visual-studio - WNS 推送通知在 Debug模式下失败,错误为 : The Token obtained from Token Provider is wrong

t4 - Xamarin Studio/MonoDevelop T4 预构建

c# - T4 模板在解决方案中添加现有项目的程序集

c# - 为什么将 RichTextBox 上的 XAML 属性设置为此值会使 Silverlight 崩溃?

.net - ToString() 和调试器的字符串可视化工具

c# - 给定一个表示类型的字符串,我需要知道它是值类型还是引用类型