5

我从一个 XML 文件中生成了相当多的代码,但是这些模板被组织在两个不同的 T4 模板中。每当我更改 XML 文件时,我必须记住打开这两个*.tt文件,简单地更改它们(添加/删除空格)并再次保存它们以确保生成代码。

这不可能是正确的方法!

理想情况下,如果 XML 文件已更改,我希望 Visual Studio 2008 对 T4 文件进行文本转换。我有点迷茫,因为我真的不知道 Visual Studio 如何构建 C# 项目,所以指向那个方向的指针也会有所帮助(然后我可以自己尝试弄清楚)。

4

2 回答 2

2

您可以使用 T4Toolbox 中的 T4ScriptFileGenerator作为 XML 文件的自定义工具。假设您的项目中有使用此自定义工具的 Test.XML 文件。第一次保存 Test.XML 时,此自定义工具会创建一个新的 Test.tt 文件。您可以将代码生成逻辑放在那里(就地,或#include 您的其他 .tt 文件)。下次保存 Test.XML 时,它将转换(生成代码)现有的 Test.tt。

于 2009-10-28T10:40:24.347 回答
2

我想我可能终于在这里找到了解决方案。在浏览 C# 项目的项目文件中如何提及 XAML 文件时,我得到了这个想法。

让我们假设一个文件使用来自的数据,A.tt并且我们希望在更改时重新生成代码。B.ttC.xmlC.xml

编辑项目文件。您对A.ttand的定义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>

我相信当您创建模板文件时,大部分内容已经为您完成了,所以您真正需要添加的只是s和s 的<DependentUpon>C.xml</DependentUpon>部分。ItemGroupA.ttB.tt

于 2010-11-12T10:44:19.533 回答