Завдяки GitHub.com/Mono/T4 , на даний момент ви можете це зробити як для .NET Core, так і для Visual Studio, додаючи це у свій .csproj
файл:
<ItemGroup>
<DotNetCliToolReference Include="dotnet-t4-project-tool" Version="2.0.5" />
<TextTemplate Include="**\*.tt" />
</ItemGroup>
<Target Name="TextTemplateTransform" BeforeTargets="BeforeBuild">
<ItemGroup>
<Compile Remove="**\*.cs" />
</ItemGroup>
<Exec WorkingDirectory="$(ProjectDir)" Command="dotnet t4 %(TextTemplate.Identity)" />
<ItemGroup>
<Compile Include="**\*.cs" />
</ItemGroup>
</Target>
Якщо ви трансформуєте свої шаблони на різні мови програмування, вам слід додати щось на зразок <Compile Remove="**\*.vb" />
та<Compile Include="**\*.vb" />
для того , щоб отримати ці файли , скомпільовані навіть якщо ви не згенерували файли ще.
Remove
і Include
хитрість потрібна лише для першого покоління, або ви можете зробити XML-скорочення таким:
<ItemGroup>
<DotNetCliToolReference Include="dotnet-t4-project-tool" Version="2.0.5" />
<TextTemplate Include="**\*.tt" />
</ItemGroup>
<Target Name="TextTemplateTransform" BeforeTargets="BeforeBuild">
<Exec WorkingDirectory="$(ProjectDir)" Command="dotnet t4 %(TextTemplate.Identity)" />
</Target>
і просто запустіть збірку двічі (вперше). Якщо ви вже створили файли, прив’язані до сховища, з обома прикладами не буде проблем із перебудовою.
У Visual Studio ви можете побачити щось подібне:
замість цього:
Тому додайте щось подібне до файлу проекту:
<ItemGroup>
<Compile Update="UInt16Class.cs">
<DependentUpon>UInt16Class.tt</DependentUpon>
</Compile>
<Compile Update="UInt32Class.cs">
<DependentUpon>UInt32Class.tt</DependentUpon>
</Compile>
<Compile Update="UInt64Class.cs">
<DependentUpon>UInt64Class.tt</DependentUpon>
</Compile>
<Compile Update="UInt8Class.cs">
<DependentUpon>UInt8Class.tt</DependentUpon>
</Compile>
</ItemGroup>
Повний приклад тут: GitHub.com/Konard/T4GenericsExample (включає генерацію декількох файлів з одного шаблону).