我从单个XML文件生成了相当多的代码,但模板组织在两个不同的T4模板中。每当我更改XML文件时,我都要记得打开两个*.tt
文件,简单地更改它们(添加/删除空格)并再次保存它们以确保生成代码。
这不是正确的做法!
理想情况下,如果XML文件已更改,我希望Visual Studio 2008对T4文件执行文本转换。我有点迷失,因为我不知道Visual Studio如何构建C#项目,所以指向这个方向的指针也会有所帮助(我可以尝试自己弄清楚)。
答案 0 :(得分:2)
您可以使用T4Toolbox中的T4ScriptFileGenerator作为XML文件的自定义工具。假设您使用此自定义工具在项目中拥有Test.XML文件。第一次保存Test.XML时,此自定义工具会创建一个新的Test.tt文件。您可以将代码生成逻辑放在那里(到位,或#include您的其他.tt文件)。下次保存Test.XML时,它将转换(生成代码)现有的Test.tt。
答案 1 :(得分:2)
我想我可能最终在这里找到了解决方案。在浏览c#项目的项目文件中如何提及XAML文件时,我明白了。
我们假设文件A.tt
和B.tt
使用C.xml
中的数据,我们希望在C.xml
更改时重新生成代码。
编辑项目文件。您对A.tt
和B.tt
的定义应如下所示:
<ItemGroup>
<None Include="A.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<LastGenOutput>A.cs</LastGenOutput>
<DependentUpon>C.xml</DependentUpon>
</None>
<None Include="B.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<LastGenOutput>B.cs</LastGenOutput>
<DependentUpon>C.xml</DependentUpon>
</None>
</ItemGroup>
此外,您需要(当然......)
<ItemGroup>
<None Include="C.xml" />
</ItemGroup>
还有自动生成A.cs
和B.cs
的说明:
<Compile Include="A.cs">
<DependentUpon>A.tt</DependentUpon>
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
</Compile>
<Compile Include="B.cs">
<DependentUpon>B.tt</DependentUpon>
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
</Compile>
我相信在您创建模板文件时,大部分内容都已经为您完成了,因此您真正需要添加的是<DependentUpon>C.xml</DependentUpon>
ItemGroup
部分的A.tt
部分B.tt
和{{1}}。