C# Visual Studio T4模板替换类文件中的文本

C# Visual Studio T4模板替换类文件中的文本,c#,visual-studio,t4,C#,Visual Studio,T4,我想知道如何创建一个T4模板,该模板可以查找并替换类文件中的字符串 例如: 我有一个名为“Test.cs”的类文件,它是由其他进程自动生成的。 我想对“Test.cs”文件运行一个T4模板,该文件将找到的所有“OldText”文本重命名为“NewText” 运行T4模板之前的Test.cs public class OldText { public OldText() {} } public class NewText { public NewText() {} }

我想知道如何创建一个T4模板,该模板可以查找并替换类文件中的字符串

例如:
我有一个名为“Test.cs”的类文件,它是由其他进程自动生成的。
我想对“Test.cs”文件运行一个T4模板,该文件将找到的所有“OldText”文本重命名为“NewText”

运行T4模板之前的Test.cs

public class OldText 
{ 
    public OldText() {} 
}
public class NewText 
{ 
    public NewText() {} 
}
运行T4模板后的Test.cs

public class OldText 
{ 
    public OldText() {} 
}
public class NewText 
{ 
    public NewText() {} 
}

正如Jeroen指出的,这不是t4模板的用途。但是,您可以考虑编写一个T4模板,该模板将为您生成Test.Cs,其中实际的类名称将存储在变量中。您的Test.tt可能如下所示:

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<#
    var className = "OldText";
#>
using System;

public class <#= className #>
{ 
    public <#= className #>() {} 
}

使用制度;
公共课
{ 
公共(){}
}

然后,要用类名NewText生成Test.cs,只需在一个地方更改
className
变量的值。

这不是T4的用途。这就是VS addins或Roslyn syntaxwalkers所做的。不幸的是,这不仅仅是类名。T4模板是Microsoft创建的OData模板,在从OData服务提取元数据时,它错误地生成了NameSpace.ClassName。@goroth您所说的是它吗?你有没有试过在问答部分要求修复?我已经在他们的网站上发布了几个bug,但他们不太擅长响应。你有权访问OData模板文件吗?你能修改它做你想做的吗?除此之外,roslyn可能是jeroen建议的方式。