This TDS Code Generation template is an example of how you can generate a multiple files that contains a single class in each.
<#@ template language="C#" hostSpecific="true" #> | |
<#@ import namespace="System" #> | |
<#@ import namespace="System.IO" #> | |
<#@ import namespace="HedgehogDevelopment.SitecoreProject.VSIP.CodeGeneration.Models" #> | |
<#@ parameter name="Model" type="HedgehogDevelopment.SitecoreProject.VSIP.CodeGeneration.Models.SitecoreItem" #> | |
<#@ parameter name="DefaultNamespace" type="System.String" #> | |
<# | |
/************************************************************ | |
This TDS Code Generation template is an example of how | |
you can generate a multiple files that contains | |
a single class in each. | |
WARNING: | |
**This is unsupported by Hedgehog Development.** | |
Using this method of code generation will likely lead | |
to orphaned code files as the files aren't deleted | |
if a Sitecore template is removed from the project. | |
Remember that the generated file can be overwritten | |
at any time by TDS so do not make changes to the | |
generated file. Use partial classes in a different | |
file to expand the generated class. | |
************************************************************/ | |
#> | |
<# | |
// Only act on templates | |
if(!(Model is SitecoreTemplate)) | |
{ | |
return string.Empty; | |
} | |
SitecoreTemplate Template = (SitecoreTemplate)Model; | |
#> | |
//------------------------------------------------------------------------------ | |
// <auto-generated> | |
// This code was generated by Team Development for Sitecore. | |
// http://TeamDevelopmentForSitecore.com | |
// | |
// Manual changes to this file may cause unexpected behavior in your application. | |
// Manual changes to this file will be overwritten if the code is regenerated. | |
// </auto-generated> | |
//------------------------------------------------------------------------------ | |
using System; | |
namespace <#=Template.Namespace#> | |
{ | |
/// <summary> | |
/// <#= Template.Name #>Item | |
/// <para>Path: <#= Template.Path #></para> | |
/// <para>ID: <#= Template.ID.ToString() #></para> | |
/// </summary> | |
public partial class <#= Template.Name #> | |
{ | |
<#foreach(SitecoreField field in Template.Fields){#> | |
/// <summary> | |
/// The <#=field.Name#> field. | |
/// <para>Field Type: <#=field.Type#></para> | |
/// <para>Field ID: <#=field.ID.ToString()#></para> | |
/// <para>Custom Data: <#=field.Data#></para> | |
/// </summary> | |
public string <#= field.Name #> { get; set; } | |
<#}#> | |
} | |
} | |
<# | |
/*****************************************************/ | |
// In addition to the general TDS code generation | |
// manually save the output of this transformation | |
// to a separate file | |
SaveOutput(); | |
/*****************************************************/ | |
#> | |
<#+ | |
/// <summary> | |
/// The Model passed to this t4 template doesn't provide us with enough information | |
/// about the project that is configured in the TDS Code gen properties screen. | |
/// Therefore, the files will be stored relative to this .tt file. | |
/// Multiple outputs of T4 doesn't include them in the project and manual | |
/// adding/deleting from project would be requried | |
/// </summary> | |
/// <param name="outputFileName"></param> | |
void SaveOutput() | |
{ | |
// we will store the files according to the namespace | |
// i.e. each namespace segment will represent a path segment | |
// My.Namespace.For.The.Class --> My\Namespace\For\The\Class\[Model.Name].cs | |
string fileNamespace = Model.Namespace; | |
string outputFileName = string.Concat(fileNamespace.Replace('.', '\\'), "\\", Model.Name, ".cs"); | |
/// Feel free to adjust to fit your project structure | |
string templateDirectory = System.IO.Path.GetDirectoryName(Host.TemplateFile); | |
string outputFilePath = System.IO.Path.Combine(templateDirectory, "MultipleOutputs", outputFileName); | |
// Ensure the path exists | |
System.IO.FileInfo f = new System.IO.FileInfo(outputFilePath); | |
if (!f.Directory.Exists) | |
{ | |
f.Directory.Create(); | |
} | |
// Create the file and write out the contents | |
System.IO.File.WriteAllText(outputFilePath, this.GenerationEnvironment.ToString()); | |
// This line will prevent the output of the transformation from being written to the single file. | |
this.GenerationEnvironment.Remove(0, this.GenerationEnvironment.Length); | |
} | |
#> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment