5

1 つの XML ファイルから大量のコードを生成していますが、テンプレートは 2 つの異なる T4 テンプレートに編成されています。XML ファイルを変更するときはいつでも、2 つのファイルを開き、*.tt簡単に変更 (スペースを追加または削除) し、再度保存して、コードが確実に生成されるようにする必要があります。

これは正しい方法ではありません。

理想的には、XML ファイルが変更された場合に、Visual Studio 2008 が T4 ファイルに対してテキスト変換を行うようにしたいと考えています。Visual Studio が C# プロジェクトをどのように構築するのかよくわからないので、少し迷っています。そのため、その方向へのポインターも役立ちます (その後、自分で理解しようとすることができます)。

4

2 に答える 2

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.csB.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 の<DependentUpon>C.xml</DependentUpon>部分だけです。ItemGroupA.ttB.tt

于 2010-11-12T10:44:19.533 に答える
2

T4Toolbox のT4ScriptFileGeneratorを XML ファイルのカスタム ツールとして使用でき ます。このカスタム ツールを使用して、プロジェクトに Test.XML ファイルがあるとします。Test.XML を初めて保存すると、このカスタム ツールによって新しい Test.tt ファイルが作成されます。そこにコード生成ロジックを配置できます (その場で、または他の .tt ファイルを #include します)。次に Test.XML を保存すると、既存の Test.tt が変換されます (そこからコードが生成されます)。

于 2009-10-28T10:40:24.347 に答える