我在 Visual Studio 2012 中使用带有T4 工具箱的 T4 模板来生成大约 100 个文件并将它们添加到项目中。我有两个模板,其中一个输出.cs文件,另一个输出相应的.designer.cs。以这种方式命名它似乎会自动分配<DependentUpon>
.csproj 文件中的属性。(这是 VS2012 的功能吗?还是 T4Toolbox?)
生成本身只需要几秒钟。但是,在此期间 Visual Studio 会占用 CPU 大约 3 分钟的长时间停顿。有什么办法可以避免这种长时间的停顿吗?
我的模板看起来像这样
<#@ template language="C#" debug="false" #>
<#@ output extension="txt" #>
<#@ assembly name="System.Core" #>
// imports ommitted...
<#@ assembly name="T4Toolbox.dll"#>
<#@ include file="T4Toolbox.tt" #>
<#
// about 100 files
var filenames = MyHelper.GetFilenamesToProcess();
// for each input file, generate two output files
foreach(string filename in filenames)
{
var mainPartTemplate = new MainPartTemplate();
mainPartTemplate.RenderToFile(fileName + ".cs");
var designerPartTemplate = new DesignerPartTemplate();
designerPartTemplate.RenderToFile(fileName + ".designer.cs");
}
// Beep so I can hear when the script finishes.
Console.Beep();
// It takes about two seconds to get here, then there is a 3 minute wait while
// Visual Studio is unresponsive.
#>
如果我将扩展名.designer.cs更改为其他任何内容,则脚本运行后不会出现延迟,但<DependentUpon>
随后会丢失标记,因此文件在解决方案资源管理器中被分隔,并且右键单击时“在设计器中查看”选项不可用.